hsqldb からデータを選択する関数を改善しようとしているので、複数のスレッドで実行しようとしましたが、次の例外が発生しました。
java.sql.SQLNonTransientConnectionException: connection exception: closed
at org.hsqldb.jdbc.Util.sqlException(Unknown Source)
at org.hsqldb.jdbc.Util.sqlException(Unknown Source)
at org.hsqldb.jdbc.Util.sqlException(Unknown Source)
at org.hsqldb.jdbc.JDBCStatementBase.checkClosed(Unknown Source)
at org.hsqldb.jdbc.JDBCStatementBase.getResultSet(Unknown Source)
at org.hsqldb.jdbc.JDBCStatement.getResultSet(Unknown Source)
at org.hsqldb.jdbc.JDBCStatement.executeQuery(Unknown Source)
これは、毎回新しいスレッドで実行しようとした関数です。
public List<String> getAllClassNames(boolean concrete) throws ClassMapException {
List<String> result = new ArrayList<String>();
try {
ResultSet rs = null;
Connection connection = DBConnection.getConnection();
Statement st = connection.createStatement();
if (concrete)
rs = st.executeQuery("select cd_name from CLASS_DESCRIPTORS where CD_CONCRETE=true order by cd_name");
else
rs = st.executeQuery("select cd_name from CLASS_DESCRIPTORS order by cd_name");
while (rs.next()) {
result.add(rs.getString("cd_name"));
}
} catch (SQLException e) {
_log.error("SQLException while retrieve all class names." + e.getMessage(), e);
throw new ClassMapException("SQLException while retrieve all class names." + e.getMessage(), e);
} finally {
DBConnection.closeConnection();
}
return result;
}
異なるスレッドで複数の選択を実行すると接続が閉じられることを読みました。これは本当ですか、それを解決する方法は?