1

我正在使用 Java EE 和 derby,我尝试从我的结果集中获取数据并将它们放入 int 和 string 但不工作它给了我这个错误:

java.sql.SQLException:当前光标位置的操作无效。

我尝试了 result.next() 但没有,这是我的代码:

    Connection conn = null;
    Statement stmt = null;
    ResultSet result = null;  

    Hotel hot = new Hotel();
    try {
        synchronized (dataSource) {
            conn = dataSource.getConnection();
        }



        stmt = conn.createStatement();
        String req = "SELECT * FROM hotel WHERE num = " + num;
        result = stmt.executeQuery(req);                                                              

        }

        //result.next();           

        int xxnum = result.getInt(1);
        String nom = result.getString("nom");
        String villeV = result.getString("ville");
        int etoilesV = result.getInt("etoiles");
        String directeur = result.getString("directeur");

        Hotel hol = new Hotel(num, nom, villeV, etoilesV, directeur);                

        result.close();
        stmt.close();
        return hol;
    } catch (SQLException ex) {
        throw new DAOException("probl�me r�cup�ration de la liste des hotels !!", ex);
    } finally {
        closeConnection(conn);
    }
4

2 回答 2

5

错误

java.sql.SQLException: Invalid operation for the current cursor location.

将由未使用将光标设置到下一个位置引起

result.next();

将电话放在if声明中

if (result.next()) {
   // build Hotel object
   ...
}

如果您仍然没有看到任何结果,请SQL直接针对您的数据库运行您的数据库并查看是否返回了任何记录。如果没有,请相应地调整您的查询或数据。


旁注:

  • 用于PreparedStatement防止SQL 注入攻击。
  • 在一个块中放置result.close();stmt.close();调用。finally
于 2013-01-20T12:01:13.503 回答
2

您需要使用next()ResultSet 的方法。

检查Javadocs here,我已经剪掉了下面的相关部分。

将光标从其当前位置向前移动一行。ResultSet游标最初位于第一行之前;第一次调用 next 方法使第一行成为当前行;第二次调用使第二行成为当前行,依此类推。

因此,您需要在代码中执行此操作:

if(result.next())
{
    int xxnum = result.getInt(1);
    String nom = result.getString("nom");
    String villeV = result.getString("ville");
    int etoilesV = result.getInt("etoiles");
    String directeur = result.getString("directeur");
}
于 2013-01-20T12:00:53.700 回答