Java.sql.SQLException 执行 SELECT

标签 java sql sqlexception

当我尝试执行此代码时:

    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/

相关文章:

java - 如何在 Android 中使用 JSON 引擎

java - Netbeans 不在运行时加载类

sql - 如何仅更改ID即可复制记录?

c# - Signalr SQL底板导致The wait operation timed out异常

java - ResultSet.getString(1) 抛出 java.sql.SQLException : Invalid operation at current cursor position

java - "if"语句 block 无法正常工作

java - 为什么 Wildfly 10 在部署时给我 "Empty name segment is not allowed for jdbc:postgresql"?

android - 无法从 Sqlite 数据库中获取数据

sql - 有用于将sql语句转换为字符串格式的在线工具吗?

mysql - SQL 错误 : 1452, SQL 状态:23000 |无法添加或更新子行:外键约束失败