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、データベースに対して直接実行し、レコードが返されるかどうかを確認してください。そうでない場合は、それに応じてクエリまたはデータを調整します。


補足:

  • SQL インジェクション攻撃PreparedStatementから保護するために使用します。
  • ブロック内に配置result.close();してstmt.close();呼び出しfinallyます。
于 2013-01-20T12:01:13.503 に答える
2

next()ResultSet のメソッド を使用する必要があります。

ここでJavadocsを 確認してください。以下の関連部分を抜粋しました。

カーソルを現在の位置から 1 行前方に移動します。ResultSetカーソルは、最初は最初の行の前に配置されます。メソッド next の最初の呼び出しでは、最初の行が現在の行になります。2 番目の呼び出しでは、2 番目の行が現在の行になります。

したがって、コードでこれを行う必要があります。

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 に答える