如何解决此错误:数据类型text和varchar在等于运算符中是不兼容的?

时间:2011-11-29 06:22:34

标签: java jsp jdbc

我在microsoft sql server management studio中有一个名为Userdetails的表,其列名为[Email address],其数据类型为varchar(50)。现在,我在jsp中访问此变量,将此变量与另一个名为email2的变量进行比较,该变量的数据类型为text。不幸的是,我收到错误。

这只是我代码的一部分。

String str=request.getParameter("email2");
ResultSet rs = st.executeQuery("select [Email address],Username from Userdetails where [Email address]='" + str + "');

1 个答案:

答案 0 :(得分:1)

第一个问题:您直接在SQL中包含值。不要这样做 - 它只是要求SQL injection attack

而是使用带参数化值的预准备语句。您可能会发现这足以解决问题。

PreparedStatement pst = conn.prepareStatement
   ("select [Email address], Username from Userdetails where [Email address]=?");

// This may give the same problem...
pst.setString(1, str);

// but this may fix it
// pst.setClob(1, new StringReader(str));

ResultSet results = pst.executeQuery();

(显然只能以某种方式设置参数。)

不要忘记关闭finally块中的语句。