是否可以使用LIKE准备好的语句占位符?

时间:2012-12-28 20:21:04

标签: java mysql prepared-statement

此操作失败:
db.prepareStatement("SELECT * FROM " + table + " WHERE " + column + " LIKE '?%'");

因为?未被识别为值的占位符。我该如何解决这个问题?

3 个答案:

答案 0 :(得分:6)

将通配符放在变量中,而不是在语句中,如:

stmt = db.prepareStatement("SELECT * FROM " + table + " WHERE " + column + " LIKE ?");
stmt.setString(1, "myterm%");

答案 1 :(得分:0)

尝试将百分号作为LIKE参数的一部分包含在内:

db.prepareStatement("SELECT * FROM " + table + " WHERE " + column + " LIKE ?"); 

我不太喜欢这个查询。我不认为通过以这种方式连接表和列来节省很多。

答案 2 :(得分:0)

将您的值传递到CONCAT()函数:

db.prepareStatement("SELECT * FROM " + table 
    + " WHERE " + column 
  + " LIKE CONCAT(?, '%')");

这样做的好处是代码使得调用不需要知道该参数与LIKE一起使用,因此您可以使用与其他非LIKE查询相同的参数值。