閉じたときに、私はこのような方法を持って空になっています。 私は衣類の準備が完了した行をコメントアウトすると、//selectQuery.close();
すべてが問題ありません。 の後に結果セットに値を代入してを閉じます。なぜそれは空ですか?ResultSetが、私はPreparedStatementの
2
A
答えて
1
ResultSet
は実行済みStatement
に関連付けられています。ステートメントと結果セットを閉じ、その中のデータをクリアします。
ステートメントを閉じる前に結果セットを処理する必要があるため、アプローチが機能しません。
1
javadocがそう言うので:
注:
Statement
オブジェクトが閉じて、ResultSet object
その電流を1が存在する場合にも、閉じられています。
理論的根拠:Statement.close()
の動作は、すべてのリソースを解放することです。これらのリソースの1つは、結果を読み取るためのサーバー側のカーソルです。しかし、あなたがそれを解放すれば、ResultSet
はデータを引き出すことができません。
(閉鎖された)ResultSet
がどのように「空」であると判断しているのか不思議です。閉じたResultSet
のすべての操作(close()
を除く)は例外をスローするはずです。
1
結果セットのデータを取得する前にステートメントを閉じる必要はありません。そうしないと、アクセスできない可能性があります。
このメソッドを呼び出すと、そのResultSetオブジェクトは閉じられます。
したがって、ステートメントの使用が終了したときにのみStatement.close()
メソッドを呼び出します。
最後の文で閉じる必要があります。
このようにして、閉じるときに心配する必要がなくなります。あなたの実際のコードでは
:
private static ResultSet select (Connection connection, String query) {
PreparedStatement selectQuery = null;
ResultSet resultSet = null;
try {
selectQuery = connection.prepareStatement(query);
resultSet = selectQuery.executeQuery();
} catch (SQLException e) {
System.out.println(e);
}
finally {
if (selectQuery != null) { selectQuery.close(); }
}
return resultSet;
}
}
より良い代替手段は、try-と、リソース文を使用している:
try (Statement stmt = con.createStatement()) {
// ...
}
1
あなたがResultSetを繰り返し処理する必要があります。上位レベルの例がここにあります:
try{
// execute the query
ResultSet rs = st.executeQuery(query);
// iterate through the result set
while (rs.next())
{
// Replace with your data
int id = rs.getInt("id");
String name = rs.getString("name");
// do stuff with the result set, add to a List of objects (for example)
}
selectQuery.close();
}catch(SQLException e) {
System.out.println(e);
}
関連する問題
- 1. 私は、JDBCのResultSet
- 2. のPreparedStatementが
- 3. Java ResultSetとPreparedStatementを使用してmySQL列挙型フィールドにアクセスする方法
- 4. PreparedStatementが1回だけ使用されても、ResultSetの終了後に操作が許可されない
- 5. ResultSetが
- 6. ResultSetが閉じ
- 7. のPreparedStatementが正しく
- 8. クローズResultSetの私のアプリケーションでのステートメント
- 9. TomcatのPreparedStatementキャッシュ
- 10. ORA-00907:PreparedStatementの
- 11. C++ preparedstatement
- 12. PreparedStatement setNull(..)
- 13. Java - preparedstatement
- 14. SQL Serverが返すのは1 resultset
- 15. のJavaのPreparedStatement:ます。com.microsoft.sqlserver.jdbc.SQLServerException:私は範囲
- 16. JavaのアップデートのPreparedStatement
- 17. netbeansを使用して、PreparedStatementとResultSetを使用してMYSqlからデータを取得する
- 18. Javaストリームは、ResultSetオブジェクト
- 19. JDBCのPostgresSQL query_to_xml PreparedStatement
- 20. Datastax - PreparedStatementはスレッドセーフですか?
- 21. SQLGrammarException:私は次のクエリを実行したいのResultSet
- 22. Java Crosstab - preparedstatementクエリ
- 23. JDBC PreparedStatementクエリ
- 24. Java PreparedStatementエラー
- 25. SQL PreparedStatement Android
- 26. EJBとpreparedStatement?
- 27. PreparedStatement.close()とPreparedStatement = null;
- 28. HashMapのResultSet
- 29. のResultSetクエリ
- 30. ResultSetオブジェクトのエラー
これは、おそらくクエリの終了によって閉じられるためです。あなたはResultSetを返すべきではなく、それらを "インプレース"で使用し、 –
を処分するべきです:https://stackoverflow.com/questions/1039419/when-to-close-connection-statement-preparedstatement-and-resultset-in-jdbc ?rq = 1 –