在没有反引号的情况下在MySQL中使用LIKE

时间:2015-07-16 09:34:37

标签: mysql exception-handling prepared-statement

我使用NetBeans 8.0.2制作库存管理系统。我有一个搜索功能,它从文本框中获取字符串/子字符串并搜索列。我正在使用LIKE,以便也可以搜索子字符串。之前我使用过PreparedStatement:

query="SELECT * FROM `desktops` WHERE `Asset Code` like `%?%` ";

但占位符不能放入反引号,所以我得到一个例外:参数索引超出范围(1>参数个数,即0)

然后我使用Statement而不是PreparedStatement并将输入放在查询中,如下所示:

query="SELECT * FROM桌面WHERE资产代码like%" +值+"%"; //value is the input from the textbox.

这导致以下异常:未知列'%Ru%'在' where子句' 。 Ru就是我在文本框中输入的内容。

请建议一个不会给我任何异常的解决方案,并在搜索字符串/子字符串时返回该值。

2 个答案:

答案 0 :(得分:0)

您的查询必须如下

query="SELECT * FROM desktops WHERE `Asset Code`  like '%"+value+"%'";

你必须在列名周围使用反引号,并在like函数的值周围使用单引号。

但是你的查询对准备好的陈述没有任何意义。

准备好的陈述看起来像

query="SELECT * FROM desktops WHERE `Asset Code`  like ?";

您必须稍后绑定值。

Here你找到了一个关于如何在JAVA中使用准备好的stements的例子

答案 1 :(得分:0)

您必须将%放在准备语句的参数内,或者在查询中将它们连接起来。

SELECT ... FROM ... WHERE column LIKE CONCAT('%',?,'%')