如何从android中的多个线程锁定数据库?

时间:2011-06-04 09:45:07

标签: android sqlite locking

从几天开始,我面临奇怪的例外,

IllegalStateException : database not opened.

实际上我正在从多个线程更新数据库,所以可能是我在关闭后更新数据。所以请任何人告诉我如何为sqlite数据库应用锁定和解锁机制。

这里有一个数据库功能。请告诉我有什么不对劲的。

if(cBookmark != null && !checkIfBookmarkExists(cBookmark)){
    SQLiteDatabase sqLiteDatabase = null;
    try{    
        sqLiteDatabase = mDatabaseHelper.getWritableDatabase();
        SQLiteStatement sqLiteStatement = sqLiteDatabase.compileStatement(
                "insert into chart_bookmark ( "+
                "package_id , chart_id , chart_title , offset_x, offset_y, zoomlevel )"+
                "Values( ?,?,?,?,?,?)");
        synchronized(sqLiteStatement){
            sqLiteStatement.bindString(1, cBookmark.getPackage_id());
            sqLiteStatement.bindString(2,cBookmark.getChart_id());
            sqLiteStatement.bindString(3, cBookmark.getChartTitle());
            sqLiteStatement.bindString(4, cBookmark.getOffsetX());
            sqLiteStatement.bindString(5,cBookmark.getOffsetY());
            sqLiteStatement.bindLong(6,cBookmark.getZoomlevel());
            Log.v(TAG, ""+cBookmark.getChart_id()+cBookmark.getChartTitle()+
                          cBookmark.getOffsetX()+cBookmark.getOffsetY());
            sqLiteStatement.execute();
            sqLiteStatement.close();
        }
    }finally{
        sqLiteDatabase.releaseReference();
    }
 }

1 个答案:

答案 0 :(得分:4)

此链接可能对您有所帮助......

Android sqlite concurrency without exceptions

但是,请你详细说明你的问题!

祝你好运!

编辑:

找到与您的问题相关的新链接...

SQLite DB accessed from multiple threads