Android:打开和关闭SQLite数据库

时间:2013-04-23 14:07:10

标签: android database sqlite android-sqlite

我正在开发和Android应用程序,我经常使用访问本地数据库。可以从不同的therads访问此数据库,因此我对数据库存在协调问题。我使用以下open()close()方法。

public void open(){ 
    mDb=mDbHelper.getWritableDatabase();
}

public void close(){
        mDb.close();
}

因此,通常,当我需要访问数据库进行某些操作时,我打开数据库,然后执行一些操作,最后关闭数据库。我通常用于此目的的代码如下:

    try {
        dbManager.open();
                    // database operation
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }finally{
        try {
            dbManager.close();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

但是,如果从不同的线程(假设线程A和线程B)使用这段代码,可能会出现以下情况:

A thread: performs open()
B thread: perfroms open()
A thread: perfroms some operation
A thread: performs close()
B thread: try to perform some operation but it fails!

因此,我可以猜到我应用程序启动时执行open()的唯一解决方案,以及我的应用程序停止时close()。我不确定这可能是一个很好的解决方案吗?

实际上,getWritableDatabase()方法的文档(来自我的open())说:

Make sure to call close() when you no longer need the database

那么,任何人都可以建议我一个替代解决方案吗?

2 个答案:

答案 0 :(得分:2)

您可以使用单例实例,通常不能关闭数据库(但保持事务处理关闭)。有一些信息:

Android SQLite DB When to Close

答案 1 :(得分:1)

创建一个包装类,添加一个原子整数成员,每次打开数据库时,递增成员,当你关闭它时,递减成员,如果成员为零,实际上关闭数据库。