Mysql SQLException,ResultSet已关闭,但我可以找出原因
我的java.sql.ResultSet有问题,我有一个java.sql.PreparedStatement,在它上运行executeQuery()返回一个ResultSet,但当我尝试从查询中获取结果时,却引发了一个异常: 异常:java.sql.SQLException消息:之后不允许操作 结果集关闭 通过在线搜索,结果集可能会因为以下几个原因而关闭:Mysql SQLException,ResultSet已关闭,但我可以找出原因,mysql,prepared-statement,resultset,sqlexception,Mysql,Prepared Statement,Resultset,Sqlexception,我的java.sql.ResultSet有问题,我有一个java.sql.PreparedStatement,在它上运行executeQuery()返回一个ResultSet,但当我尝试从查询中获取结果时,却引发了一个异常: 异常:java.sql.SQLException消息:之后不允许操作 结果集关闭 通过在线搜索,结果集可能会因为以下几个原因而关闭: 生成它的PreparedStatement对象已关闭 重新执行生成它的PreparedStatement对象 生成它的PreparedSta
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()){
正如我所说,我从不关闭连接或语句,正如您所看到的,在尝试查看结果之前,我不会重用该语句
谢谢你的帮助
Marc我不知道这是否能解决这个问题,但你可以/应该搬家
if (psAccountPartyIdByEmail == null) {
psAccountPartyIdByEmail = session.connection().prepareStatement(SQL_GET_ACCOUNTPARTYID_BY_EMAILADDRESS);
}
在while循环之外。
另外,在处理完行后关闭结果集。
然后,当您完成所有操作后,关闭您的语句和连接。我尝试了您的两个建议,但都没有效果。出于好奇,为什么您要将上述代码移出循环,为什么您认为这会产生影响。我希望关闭ResultSet会奏效。至于移动PS创建,没有理由继续在循环中检查它;除非可能没有reader.nextLine(),在这种情况下,将毫无理由地创建PS。您使用的是什么数据库和驱动程序?com.mysql.jdbc.driver和mySQLTo更具体地说是mysql-connector-java-5.1.13和mysql 5.5