csh_34 2013-08-06 07:01 采纳率: 0%
浏览 9910

打开和关闭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 2015-01-03 06:40
    关注

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

    评论

报告相同问题?

悬赏问题

  • ¥20 双层网络上信息-疾病传播
  • ¥50 paddlepaddle pinn
  • ¥15 Stata 面板数据模型选择
  • ¥20 idea运行测试代码报错问题
  • ¥15 网络监控:网络故障告警通知
  • ¥15 django项目运行报编码错误
  • ¥15 请问这个是什么意思?
  • ¥15 STM32驱动继电器
  • ¥15 Windows server update services
  • ¥15 关于#c语言#的问题:我现在在做一个墨水屏设计,2.9英寸的小屏怎么换4.2英寸大屏