android sqlite多线程读写

   在项目中需要用到多线程操作数据库,这里的多线程是指绕过数据库的锁机制,同时对数据库进行读写。

   也就是说在对数据库读的同时,可以对数据库进行写操作,而不需要等待数据库读操作完成。


实现原理:

我们知道,sqlite的一个数据库是一个单独的 db 文件,这时可以使用两个数据库文件,一个

负责对数据库写,一个负责对数据库读,然后再合并数据。


解决方法:

其实SQLiteDataBase 在API 11 多了一个 属性 ENABLE_WRITE_AHEAD_LOGGING 。 

可以打开,enableWriteAheadLogging(),可以关闭disableWriteAheadLogging(),默认是关闭的。

这个属性是什么意思呢?

参考api文档,这个属性关闭时,不允许读,写同时进行,通过 锁 来保证。

当打开时,它允许一个写线程与多个读线程同时在一个SQLiteDatabase上起作用。实现原理是写操作其实是在一个   单独的文件,不是原数据库文件。所以写在执行时,不会影响读操作,读操作读的是原数据文件,是写操作开始之      前的内容。

在写操作执行成功后,会把修改合并会原数据库文件。此时读操作才能读到修改后的内容。但是这样将花费更多的     内存。 

关键代码:

public class SQLHelper extends SQLiteOpenHelper{

public SQLHelper(Context context) {
super(context, DB_NAME, null, VERSION);
this.context = context;
//开启多线程读写
this.getWritableDatabase().enableWriteAheadLogging();

}

}

有了它,多线程读写问题就解决了,可惜只能在API 11 及以上使用。


你可能感兴趣的:(android)