私の Web サービスには、作成時に Sqlite データベースへの接続を開くデータベース アダプターがあります。
public DatabaseAdapterJava(Database database)
{
try
{
exceptionController = new ExceptionControllerJava();
// establish a connection to the database
Class.forName(database.getDatabaseClass());
conn = DriverManager.getConnection(database.getDatabasePath());
conn.setAutoCommit(true);
}
catch(ClassNotFoundException e)
{
exceptionController.logException(this.toString(), "DatabaseAdapterSqlite", e.getMessage(), false);
}
catch(SQLException e)
{
exceptionController.logException(this.toString(), "DatabaseAdapterSqlite", e.getMessage(), false);
}
}
これはうまく機能します。または、少なくとも機能しました。しかし最近、2回目以降のデータベースへの呼び出しでnull接続例外が発生し始めました。
例えば:
int user_id = dbadapter.createUser(user);
//do something...
int user_records_affected = dbadapter.updateUser(user);
次に、データベースへの次のステートメントが実行されると、接続が閉じられます。
int other_id = dbadapter.createLogRecord(log);
私の明示的な同意なしに、データベース接続が閉じられているようです。
接続を閉じるにはどうすればよいですか?
create メソッドと update メソッドは、以下に渡される文字列 sql ステートメントを単純にアセンブルします。
@Override
public boolean executeSQL(String sql) {
try{
cm = conn.createStatement();
cm.execute(sql);
return true;
}catch(SQLException e){
ExceptionMessage = "SQLException: "+e.getMessage();
return false;
}catch(Exception e){
**ExceptionMessage = "Exception: "+e.getMessage();**
return false;
}
}
以下を返す例外パスを強調表示しました。
ExceptionMessage = 例外: Null