您的位置:首页 > 移动开发 > Android开发

Android:SQLite无法update/insert/delete数据(数据库被locked)

2016-05-12 16:10 561 查看
[java] view plain copy

//在频繁范围数据库进行读写操作后,会发生增删改数据都无效的问题,查询一般正常。

[java] view plain copy

mDatabase.beginTransaction();

try

{

Log.v(TAG,"locked:"+mDatabase.isDbLockedByCurrentThread());//true

//Log.v(TAG,"locked2:"+mDatabase.isDbLockedByOtherThreads());//false

mDatabase.execSQL(sql);

mDatabase.setTransactionSuccessful();

}

finally

{

mDatabase.endTransaction();

}

原因是数据库被锁定了。

在每次操作数据库之前(一般是增删改对数据库进行写操作时受影响,query不影响),检查锁定状态。

每次操作数据库,按下面较完整的操作进行

[java] view plain copy

private static String Lock = "dblock";

[java] view plain copy

private static void executeSQL(final String sql)

{

SQLiteDatabase db = getDatabase();//注意每次操作数据库前都要调用这个函数,以获得有效的未被锁定的db,调试时可以在这句之前加入检测是否被locked来分析问题

synchronized (Lock)

{

db.beginTransaction();

try

{

db.execSQL(sql);

db.setTransactionSuccessful();

}

finally

{

db.endTransaction();

}

}

}

[java] view plain copy

private static SQLiteDatabase getDatabase()

{

while (mDatabase.isDbLockedByCurrentThread()

|| mDatabase.isDbLockedByOtherThreads())

{

// Log.v(TAG,"getDatabase locked.");

// db is locked, keep looping

}

return mDatabase;

}

[java] view plain copy

<span style="white-space:pre"></span><pre></pre>

<pre></pre>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: