我使用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就是我在文本框中输入的内容。
请建议一个不会给我任何异常的解决方案,并在搜索字符串/子字符串时返回该值。
答案 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('%',?,'%')