当我尝试执行此代码时:
try {
pstm = connection.prepareStatement("SELECT * FROM Menu WHERE (menuName LIKE '?%')");
pstm.setString(1,searchedMenu.getMenuName());
rs = pstm.executeQuery();
while (rs.next()) {
Menu menu=new Menu();
menu.setMenuId(rs.getInt("menuId"));
menu.setMenuName(rs.getString("menuName"));
temp.add(menu);
}
我收到主题错误,为什么?我的目的是搜索一个字符串或其一部分。 谢谢。
编辑:错误是: java.sql.SQLException:参数索引超出范围(1 > 参数数量,即 0)。 它引用了这一行: pstm.setString(1,searchedMenu.getMenuName());
最佳答案
该错误可能是因为您没有任何要设置的参数标记,因为您将问号放入了字符串中:
menuName LIKE '?%'
所以当你这样做时:
pstm.setString(1,searchedMenu.getMenuName());
没有什么可设置的,会抛出错误。如果您检查堆栈跟踪,您可能会看到一条有关参数标记数量的消息。
您应该将百分比连接到 Java 中的字符串中。在 SQL 中连接它会提供不太一致的结果,具体情况因 RDBMS 而异。
所以我建议使用如下参数编写 SQL:
SELECT * FROM Menu WHERE (menuName LIKE ?)
然后在java代码中设置参数如下:
pstm.setString(1, searchedMenu.getMenuName() + "%");
如果您知道会有空格,还可以考虑修剪菜单名称。如果一堆空格后面有一个百分号,您的结果可能与您预期的不一样。
关于Java.sql.SQLException 执行 SELECT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23064385/