让sqlite数据库在android上打开,坏主意?

时间:2011-07-01 15:50:26

标签: android sqlite

我一直在学习(缓慢但肯定地)如何处理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。

1 个答案:

答案 0 :(得分:1)

您可以关闭适配器 onDestroy()您的活动方法。

相关问题