1. //在频繁范围数据库进行读写操作后,会发生增删改数据都无效的问题,查询一般正常。
  1. mDatabase.beginTransaction();
  2. try
  3. {
  4. Log.v(TAG,"locked:"+mDatabase.isDbLockedByCurrentThread());//true
  5. //Log.v(TAG,"locked2:"+mDatabase.isDbLockedByOtherThreads());//false
  6. mDatabase.execSQL(sql);
  7. mDatabase.setTransactionSuccessful();
  8. }
  9. finally
  10. {
  11. mDatabase.endTransaction();
  12. }

原因是数据库被锁定了。

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

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

  1. private static String Lock = "dblock";
  1. private static void executeSQL(final String sql)
  2. {
  3. SQLiteDatabase db = getDatabase();//注意每次操作数据库前都要调用这个函数,以获得有效的未被锁定的db,调试时可以在这句之前加入检测是否被locked来分析问题
  4. synchronized (Lock)
  5. {
  6. db.beginTransaction();
  7. try
  8. {
  9. db.execSQL(sql);
  10. db.setTransactionSuccessful();
  11. }
  12. finally
  13. {
  14. db.endTransaction();
  15. }
  16. }
  17. }
  1. private static SQLiteDatabase getDatabase()
  2. {
  3. while (mDatabase.isDbLockedByCurrentThread()
  4. || mDatabase.isDbLockedByOtherThreads())
  5. {
  6. // Log.v(TAG,"getDatabase locked.");
  7. // db is locked, keep looping
  8. }
  9. return mDatabase;
  10. }
  1. <span style="white-space:pre"></span><pre></pre>
  2. <pre></pre>
 
 

Android:SQLite无法update/insert/delete数据(数据库被locked)的更多相关文章

  1. SQL server触发器中 update insert delete 分别给写个例子被。

    SQL server触发器中 update insert delete 分别给写个例子以及解释下例子的作用和意思被, 万分感谢!!!! 主要想知道下各个语句的书写规范. INSERT: 表1 (ID, ...

  2. 执行update, insert,delete 语句, 不返回结果集,(类型化参数)

    /// <summary> /// 执行update, insert,delete 语句, 不返回结果集,(类型化参数) /// </summary> /// <para ...

  3. Mongodb 语法,update,insert,delete,find

    ---恢复内容开始--- db.Users.update({OrganizationCode:"Global"},{$set:{OrganizationCode:"Fre ...

  4. android sqlite select,update,delete语法

    String sql = "update recentsongtab set usetime=? , strdatetime=? where songid=?";//修改的SQL语 ...

  5. Java-MyBatis-MyBatis3-XML映射文件:insert, update 和 delete

    ylbtech-Java-MyBatis-MyBatis3-XML映射文件:insert, update 和 delete 1.返回顶部 1. insert, update 和 delete 数据变更 ...

  6. SQL Server下ADO.NET 怎么获取数据库SQL语句INSERT,UPDATE,DELETE了多少行数据

    ADO.NET 在发送SQL语句到SQL Server数据库后,怎么知道真正INSERT,UPDATE,DELETE了多少行数据呢? 使用SQL Server内置的全局变量@@ROWCOUNT即可,@ ...

  7. SQL语句的使用,SELECT - 从数据库表中获取数据 UPDATE - 更新数据库表中的数据 DELETE - 从数据库表中删除数据 INSERT INTO - 向数据库表中插入数据

    SQL DML 和 DDL 可以把 SQL 分为两个部分:数据操作语言 (DML) 和 数据定义语言 (DDL). SQL (结构化查询语言)是用于执行查询的语法. 但是 SQL 语言也包含用于更新. ...

  8. MySQL数据库INSERT、UPDATE、DELETE以及REPLACE语句的用法详解

    本篇文章是对MySQL数据库INSERT.UPDATE.DELETE以及REPLACE语句的用法进行了详细的分析介绍,需要的朋友参考下   MySQL数据库insert和update语句引:用于操作数 ...

  9. 利用insert,update和delete注入获取数据

    0x00 简介 利用SQL注入获取数据库数据,利用的方法可以大致分为联合查询.报错.布尔盲注以及延时注入,通常这些方法都是基于select查询语句中的SQL注射点来实现的.那么,当我们发现了一个基于i ...

随机推荐

  1. grunt学习随笔

    1 grunt 安装  全局安装 npm install -g grunt-cli 2 配置好package.json 和 Gruntfile 文件,这两个文件必须位于项目根目录下. 2.1packa ...

  2. ggplot2 geom相关设置—分布图

    分布在R中应该算是个比较重要的内容,而通过画图来展示数据的分布,可以更直观的让我们了解数据的分布情况 直方图 geom_histogram(mapping = NULL, data = NULL, s ...

  3. OpenLayer

    <html> <head> <meta charset="utf-8"> <title>GIS开发样例-V1.0</title ...

  4. ubuntu 调试库

    .安装带有调试信息的libc: sudo apt-get install libc6-dbg .下载libc源码 a.选定一个放置源码的目录并进入,如 /home/kent/dev-os/libc6- ...

  5. Where is the python library installed?

    configure: error: Could not link test program to Python. Maybe the main Python library has been inst ...

  6. js 有关字符串的函数 以及一些和字符串有关的知识

    JS自带函数 concat 将两个或多个字符的文本组合起来,返回一个新的字符串. var a = "hello"; var b = ",world"; var ...

  7. javascript: 常用操作

    1,取得输入框的输入值,修改输入框的输入值 根据id获取id的值 jquery代码: $('#version_number').val(); 解释:$是jQuery的标准用法,('#version_n ...

  8. 实现ie6下的居中

    代码如下所示,转自 http://w3help.org/zh-cn/causes/RT8003 对于 text-align 的讨论. <div style="width:200px; ...

  9. SpringMvc+thymeleaf+HTML5中文乱码问题

    SpringMvc+thymeleaf+HTML5环境下遇到中文乱码...... 按照以往经验逐个排查,开发环境统一为utf-8编码,服务器也配置了编码过滤器,tomcat也是utf-8编码.前台页面 ...

  10. mongoDB1--什么是mongoDB

    mongodb1.mongodb与其它nosql数据库的区别我们之前应该接触过redis或者memcached,他们属于key-value数据库,他们运用哈希算法关联起来,能够达到快速的查询目的.而m ...