Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何解决此错误:数据类型text和varchar在equal to运算符中不兼容?_Java_Jsp_Jdbc - Fatal编程技术网

Java 如何解决此错误:数据类型text和varchar在equal to运算符中不兼容?

Java 如何解决此错误:数据类型text和varchar在equal to运算符中不兼容?,java,jsp,jdbc,Java,Jsp,Jdbc,我在MicrosoftSQLServerManagementStudio中有一个名为Userdetails的表,列名为[电子邮件地址],其数据类型为varchar(50)。现在,我在jsp中访问这个变量,以将这个变量与另一个名为email2的变量进行比较,该变量的数据类型是text。不幸的是,我得到了一个错误 这只是我代码的一部分 String str=request.getParameter("email2"); ResultSet rs = st.executeQuery("select [

我在MicrosoftSQLServerManagementStudio中有一个名为Userdetails的表,列名为
[电子邮件地址]
,其数据类型为
varchar(50)
。现在,我在jsp中访问这个变量,以将这个变量与另一个名为
email2
的变量进行比较,该变量的数据类型是text。不幸的是,我得到了一个错误

这只是我代码的一部分

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

第一个问题:您直接在SQL中包含值。别那么做——这只是要求一个好的机会

相反,使用带有参数化值的准备语句。你可能会发现,这足以解决问题

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
块中的语句。

尝试使用varchar(max)将您的电子邮件字段存储在数据库中。我使用了“like”而不是“=”(等于运算符),它可以正常工作。结果集rs=st.executeQuery(“从Userdetails中选择[Email address],其中[Email address]如“+str+”和day=“+str1+”和month like“+str2+””和year=“+str3+”);先生,我不明白您试图解释的内容。@user936516:以前您将值直接包含在SQL中。这真是个糟糕的主意,我已经提出了另一种选择。有关更多信息,请搜索“准备好的jdbc语句”和“SQL注入攻击”。