0
我遇到了java.sql.ResultSet問題,我有一個java.sql.PreparedStatement,我在其上運行executeQuery()以返回ResultSet,但嘗試您可以通過查詢我得到拋出的異常的結果:SQLException,ResultSet已關閉,但我可以找出原因
異常:java.sql.SQLException中的消息:不允許操作後 的ResultSet關閉。
從網上搜索,它看起來像一個結果可以最終被關閉幾個原因:
- 生成它的PreparedStatement對象已關閉。
- 生成它的PreparedStatement對象被重新執行。
- 生成它的PreparedStatement對象用於從多個結果序列中檢索下一個結果。
- 關閉用於生成PreparedStatement的連接。
我檢查了我的代碼,沒有做這些事情。下面的代碼片段引起該問題:
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()) {
就像我說我從來沒有關閉連接或聲明,你可以看到我不在嘗試查看我的結果之前,不要重複使用該聲明。
感謝他幫助...
馬克
我已經嘗試了您的兩項建議,但沒有任何區別。出於好奇,你爲什麼要將上面的代碼移到循環之外,爲什麼你認爲這會有所作爲。 – 2012-01-12 15:50:20
我希望ResultSet的關閉可以做到這一點。至於移動PS創作,沒有理由繼續在循環中檢查它;除非可能沒有reader.nextLine(),在這種情況下PS將無緣無故地創建。 – 2012-01-12 16:37:36
你使用的是什麼數據庫和驅動程序? – 2012-01-12 16:37:54