我一直在学习(缓慢但肯定地)如何处理android系统上的sqlite数据库。使用我在这里找到的信息:
http://mfarhan133.wordpress.com/2010/10/24/database-crud-tutorial-for-android/
我已经学会了如何在我的android系统上创建,加载东西并从数据库中检索信息。其中一个障碍就是这个方法:
public Cursor getClientsCursor() {
StudioTabOpenHelper dbAdapter=StudioTabOpenHelper.getDBAdapterInstance(this.getListView().getContext());
try {
dbAdapter.createDatabase();
} catch (IOException e) {
Log.i("*** select ",e.getMessage());
}
dbAdapter.openDataBase();
String query="SELECT * FROM CLIENTS;";
Cursor c = dbAdapter.selectRecordsFromDB(query, null);
//dbAdapter.close();
return c;
}
问题是上面的代码正在关闭我打开的适配器...这导致我使用返回光标的部分抱怨数据库conn#0已经关闭。所以我注释掉了dbAdapter.close();如果我再次调用这种方法,我认为将来会很糟糕。
所以我的问题是:我应该在应用程序的开头创建dbAdapter并打开数据库并保持打开状态并且永远不会关闭它吗? (如果我走这条路线,我如何将dbAdapter传递给活动,片段等)...或者我如何按原样使用getClientsCursor方法,并找出一些其他方法来传回光标并能够调用。关()?
/**
* Open the database
* @throws SQLException
*/
public void openDataBase() throws SQLException {
String myPath = DB_PATH + DATABASE_NAME;
myDataBase = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READWRITE);
}
/**
* Close the database if exist
*/
@Override
public synchronized void close() {
if (myDataBase != null)
myDataBase.close();
super.close();
}
我的适配器代码是从这里获得的:
http://mfarhan133.wordpress.com/2010/10/24/database-crud-tutorial-for-android/
我刚刚没有调用我的类DBAdapter,而是将其命名为StudioTabOpenHelper。
答案 0 :(得分:1)
您可以关闭适配器
onDestroy()
您的活动方法。