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 循环以某种方式被卡住但没有额外的输出(索引 2)。此外,数据库完全按照应有的方式更新,但程序没有从这里开始,并且“标志 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

您可以尝试而不是caq.executeUpdate connection.prepareStatement().executeUpdate() 我假设caq.executeUpdate会导致先前返回的 ResultSet 对象关闭。

似乎还有一种方法可以在 Statement 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 回答