SQLException,ResultSet已关闭,但我可以找出原因

时间:2012-01-12 15:28:18

标签: mysql prepared-statement resultset sqlexception

我遇到了java.sql.ResultSet的问题,我有一个java.sql.PreparedStatement,当我尝试从查询中获取结果时,我运行executeQuery()以返回ResultSet抛出异常:

  

异常:java.sql.SQLException消息:之后不允许操作   ResultSet已关闭。

从在线搜索看起来,结果集最终会因为某些原因而被关闭:

  1. 关闭生成它的PreparedStatement对象。
  2. 重新执行生成它的PreparedStatement对象。
  3. 生成它的PreparedStatement对象用于从多个结果序列中检索下一个结果。
  4. 关闭用于生成PreparedStatement的连接。
  5. 我检查了我的代码而没有做任何事情。下面是导致问题的代码片段:

    PreparedStatement psAccountPartyIdByEmail = null;
    ....
    try {
        String [] nextLine;
        while ((nextLine = reader.readNext()) != null) {
            String email = nextLine[0];
            .....
            try {
                if (psAccountPartyIdByEmail == null) {
                    psAccountPartyIdByEmail = session.connection().prepareStatement(SQL_GET_ACCOUNTPARTYID_BY_EMAILADDRESS);
                }
    
                psAccountPartyIdByEmail.setString(1, email);
                ResultSet partyIds = psAccountPartyIdByEmail.executeQuery();
    
                while (partyIds.next()) {
                   String partyId = partyIds.getString(1);
                    .....
                }
            } catch (SQLException e) {
                Debug.logError(e, "Encountered SQLException while running group service.", MODULE);
            }
        }
    } catch (IOException e) {
        Debug.logError(e, "Problem reading line in file", MODULE);
    }
    

    尝试执行时抛出异常:while (partyIds.next()) {

    就像我说的那样,我从不关闭连接或语句,因为你可以看到我在尝试查看结果之前没有重用该语句。

    感谢他的帮助......

    马克

1 个答案:

答案 0 :(得分:0)

我不知道这是否能解决这个问题,但你可以/应该移动

if (psAccountPartyIdByEmail == null) {
            psAccountPartyIdByEmail = session.connection().prepareStatement(SQL_GET_ACCOUNTPARTYID_BY_EMAILADDRESS);
        }

在while循环之外。 此外,在处理完行后关闭ResultSet。 然后,当你完成所有关闭你的陈述和连接。

相关问题