我的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);
}
}
这很有效,或者至少它确实如此。然而,最近我在第二个调用数据库之后开始获取空连接异常。
例如:
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 = Exception:Null