我正在尝试执行以下 SQL 查询,它尝试查找与以 abc
结尾的 column2 值匹配的结果。
PreparedStatement stmt = conn.prepareStatement("SELECT column1 FROM dbo.table1 WHERE column2 LIKE ?");
stmt.setString(1, "%" +"abc");
但即使有匹配的值,它也不会返回任何内容。这只发生在 SQL Server 上。与 informix 数据库相同的查询返回正确的结果。任何人都知道是什么导致了这种行为不同?
这是由于 PreparedStatement
的方式问题造成的吗?为 SQL Server 创建 SQL 查询?
编辑
我发现当我执行类似操作的列中的数据包含空间时会发生这种情况。例如:当该列包含“某个单词”并且我通过 stmt.setString(1, "%" + "word");
执行搜索时它不会返回匹配结果,但如果我对“someword”执行相同的操作,它将返回匹配结果
最佳答案
SQL Server 接受单引号内的 LIKE 子句中的通配符,例如 ''
。
示例 SQL 查询:
SELECT NAME FROM VERSIONS WHERE NAME LIKE 'Upd%'
上面的查询将在 SQL Server 上生成结果。对 Java 代码应用相同的逻辑也会从 PreparedStatement
检索结果。
PreparedStatement stmt = conn.prepareStatement("SELECT NAME FROM VERSIONS WHERE NAME LIKE ?");
stmt.setString(1, "Upd%");
我已经在 SQL Server 2012 上测试了这段代码,它对我有用。您需要确保传递给 JDBC 代码的搜索文字中没有尾随空格。
尽管作为旁注,您需要了解开头使用的通配符 %
会强制对表进行全表扫描,这可能会降低查询性能。一个good文章供您将来引用。
希望这有帮助!
关于java - 使用带有通配符的 Like 子句运行PreparedStatement,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44193345/