0

何が起こっているのかよくわからないので、コードの一部を投稿します

    int index2 = 0;

    while(rs.next()){
        System.out.println(rs.getInt("ItemID") + ", " + rs.getString("SocSecNum") + ", " + rs.getInt("Score"));

        if(rs.getInt("ItemID") == ID && rs.getString("SocSecNum").equals(socSecNum)){
            alreadySet = true;
            System.out.println("Flag 1");
            caq.executeUpdate("UPDATE ProjectScore SET Score = " + userScoreField.getText() +
                    " WHERE (ItemID = " + ID + ") AND (SocSecNum = '" + socSecNum + "')");
        }

        index2++;
        System.out.println(index2);
    }

    System.out.println("Flag 2");

うまくいくように見えますか?出力は次のとおりです。

1、640730-7419、3

フラグ1

1

これは、whileループが何らかの理由でスタックしているが、追加の出力(index2)がないことを意味します。また、データベースは正確に更新されますが、プログラムはここから進行せず、「フラグ2」が書き出されることはありません。何か案は?

編集:

catch (SQLException e1) {
                    System.out.println(e1.getMessage());
                    System.out.println(e1.getCause());
                }

与える

ResultSetを閉じた後の操作は許可されません

ヌル

編集2:

これがそれを機能させるために使用されるコードです

    PreparedStatement statement = caq.getConnection().prepareStatement("SELECT * FROM ProjectScore WHERE SocSecNum = '"
    + socSecNum + "'", ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
    rs  = statement.executeQuery();
4

1 に答える 1

1

以前に返されたResultSetオブジェクトが閉じるとcaq.executeUpdate connection.prepareStatement().executeUpdate() 想定している代わりに試してみてください。caq.executeUpdate

ResultSet.CONCUR_UPDATABLE
また、ステートメントhttp://docs.oracle.com/javase/6/docs/api/java/sql/Connection.html#prepareStatement(java.lang.String,int,int)で同時実行レベルを設定する方法があるようです。 )。

于 2013-01-04T02:37:38.720 に答える