我正在使用这个:

PreparedStatement preStatement = conn.prepareStatement("SELECT * FROM SomeTable WHERE attributeId = ? AND substring_index(substring_index(rowIdCombo,',',2),',',-1) = ?");

preStatement.setString(1, anAttributeID.toString());
preStatement.setString(2, locationID.toString());


使用相同的查询进行搜索在MySQL终端上可以正常工作。只有在PreparedStatement中使用Java时才使用。

rowIdCombo基本上是一串数字,用逗号分隔。像这样的东西:23,56,64,3

返回的结果集为空。如何使该查询起作用?

最佳答案

根据输出

System.out.println(preStatement);


那是:

com.mysql.jdbc.PreparedStatement@223d2c72: SELECT * FROM mydb.SomeTable WHERE attributeId = '6' AND substring_index(substring_index(rowIdCombo,',',2),',',-1) = '1'

根据您的评论,用= 1替换='1'已解决了该问题,为防止单引号引起来,请将PreparedStatement中的值设置为整数,请使用以下命令:

preStatement.setInt(2, Integer.parseInt(locationID.toString()));

09-27 06:56
查看更多