【问题标题】:Java/MySQL loop... stuck?Java/MySQL 循环...卡住了?
【发布时间】:2012-12-18 11:34:29
【问题描述】:

我真的不知道发生了什么,所以我只发布部分代码

    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();

【问题讨论】:

  • rs.next() 可能会引发异常。抓住它。
  • 在问题中添加更多信息,但是是的,这是正确的
  • 那么,...您在更新查询的同时仍然通过它的 ResultSet?解决方案:不要那样做。
  • 介意解释我是怎么做的吗?我真的不知道 ResultSet 是如何工作的。

标签: java mysql loops


【解决方案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)

【讨论】:

  • 嗯连接没有名为 getSament() 的方法,但是我尝试了 rs = caq.getStatement().executeQuery("SELECT * FROM ProjectScore WHERE SocSecNum = '" + socSecNum + "'") ;但它也没有用。我认为值得一提的是我之前使用了相同的 ResultSet。虽然我又做了一个,结果还是一样。
  • 编辑了答案。它不是 getStatement() 是 prepareStatement(),让我知道这是否有效。一开始很抱歉转储答案:-)
  • 基本上问题是您在循环中发送更新查询,这将关闭结果集并引发异常
  • 感谢它完美的工作:D 非常感谢!我需要一段时间才能确切了解原因,但我会尝试阅读它。