2 csh 34 csh_34 于 2013.08.06 15:01 提问

打开和关闭SQLite数据库

我开发了一个android程序,经常用来访问本地数据库。这个数据库可以从不同的线程中访问,所以对于数据库有一个协调问题,我用的是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

谁能告诉我一个可执行的解决方案?

1个回答

oyljerry
oyljerry   Ds   Rxr 2015.01.03 14:40

换新版本sqlite,看是否支持多线程并发访问

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!