结果集错误

时间:2013-01-20 11:56:41

标签: java sql resultset

我正在使用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);
    }

2 个答案:

答案 0 :(得分:4)

错误

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

将光标设置到下一个位置会导致

result.next();

将来电置于if声明

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

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


附注:

  • 使用PreparedStatement防止SQL Injection攻击。
  • result.close();stmt.close();个来电置于finally区块。

答案 1 :(得分:2)

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

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

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

所以你需要在代码中执行此操作:

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");
}