最近有看到过Sqlite3的相关文章,在这做一下学习笔记。
关于sqlite的介绍,可以参照一下:http://blog.csdn.net/ghost5216/article/details/4863246
sqlite3数据库是一个数据库一个文件,所以当多进程访问操作同一数据库时,即与操作同一文件一样,文件锁问题。
对同个数据库进行多进程同时读是允许的,但多进程同时写是不允许的,如果一个进程已经正在写,其他进程就会写失败。sqlite3返回信息就是"Database is locked",错误码SQLITE_BUSY,sqlite3对高并发访问支持不好,多线程访问数据库会出现数据库锁定现象。
那么在并发的情况下,如何安全的访问sqlite数据库呢?
假设你已经有一个自己的SQLiteOpenHelper。
public class DatabaseHelper extends SQLiteOpenHelper { ... }
//Thread 1
Context context = getApplicationContext();
DatabaseHelper helper = new DatabaseHelper(context);
SQLiteDatabase database = helper.getWritableDatabase();
database.insert(…);
database.close();