android sqlite

原创
2014/05/13 17:54
阅读数 236

在这之前,我还不知道数据库锁级别的概念。先简要记录一下。不同数据库锁不一样,大概有几个级别,元组锁,表锁,数据库锁。之前用的数据库都是MySQL,SqlServer等。都不是数据库级的锁。SQLite是数据库级的锁,即同一时间只能有一个线程去操作数据库。

因此,在对数据库操作时,需要自己对数据库进行加锁操作。不然就会报错:database is locked。

代码如下:

public class MySqliteHelper extends SQLiteOpenHelper {

    public MySqliteHelper(Context context, String name, CursorFactory factory, int version) {
        super(context, name, factory, version);
        
    }
    public static synchronized MySqliteHelper getDb(Context context, String name, CursorFactory factory, int version) {
        if(instance == null) {
            instance = new MySqliteHelper(context, name, factory, version);
        } 
        return instance;
    }
    
    private static MySqliteHelper instance;
}

除此之外,在每次对数据库进行操作完成后,都要将Cursor和database关闭。

在数据更新,插入及删除时,如采用

sqliteDatabase.beginTransaction();

则在数据操作完成之后,一定要将数据库操作标识置为完成。否则数据操作失败。

sqliteDatabase.setTransactionSuccessful();


展开阅读全文
打赏
0
3 收藏
分享
加载中
更多评论
打赏
0 评论
3 收藏
0
分享
返回顶部
顶部