`

sqlite遇到database is locked(SQLITE_BUSY)问题的解决

阅读更多

早上来公司,测试部的同事说测试多用户并发操作时遇到sqlite报database is locked的问题,现象是进行多用户并发查询不会出现,但只要涉及增删改操作时就会出现以上问题。
初步分析原因是多用户对sqlite数据库进行增删改操作时事务控制,当一个用户对数据库进行增删改操作时,事务未完成,此时另外一个用户对数据库进行增删改,由于之前的用户事务未完成,当并发用户数量更多时,更容易出现线程不安全问题,于是在对数据库进行增删改操作的方法上使用synchronized关键字(注:由于当时是javase项目中未使用数据库持久化框架)public synchronized int addSecurities(SecuritiesInfo si) {…..},增加线程锁后,测试时,开20个线程跑程序没出现database is locked问题。但是开50个线程跑程序时又出现了database is locked问题,当时猜测原因可能是使用纯jdbc原因,于是继续修改代码,把数据库的连接改用c3p0连接池,改用数据库连接池后将线程开50跑程序模拟测试未出现database is locked问题。但是线程数开到100时又出现了database is locked问题.
最终解决方法是修改sqlite数据库的模式: pragma journal_mode = WAL,sqlite默认的是delete模式.

 

分享到:
评论

相关推荐

    解决sqlite死锁示例异常database is locked示例

    总结来说,SQLite的死锁问题主要源于资源竞争和事务顺序,通过理解死锁产生的原因,结合异常处理、事务设计优化、日志监控等手段,可以有效地预防和解决"database is locked"异常。在实际开发中,应当重视数据库的...

    Android多线程操作sqlite(Sqlite解决database locked问题)

    然而,在多线程环境中,由于并发访问数据库,可能会遇到“database locked”(数据库被锁定)的问题。本文将深入探讨如何在Android中使用多线程操作SQLite并解决数据库被锁定的问题。 首先,理解“database locked...

    sqlite死锁datebaselock解决方案

    三、解决“database is locked”问题的步骤 1. **检查代码逻辑**:确保每次操作后都正确关闭连接和释放资源,避免事务悬空。 2. **优化事务管理**:尽量减少事务的粒度,尽快完成事务操作,避免长时间占用锁。 3. **...

    SQlite数据库在VC中的使用

    sqlite3_busy_handler sqlite3_busy_timeout sqlite3_changes sqlite3_close sqlite3_collation_needed sqlite3_collation_needed16 sqlite3_column_blob sqlite3_column_bytes sqlite3_column_bytes16 sqlite3_...

    sqlite数据库锁定问题.zip

    如果多线程同时读写(这里的指不同的线程用使用的是不同的Helper实例),后面的就会遇到android.database.sqlite.SQLiteException: database is locked这样的异常。对于这样的问题,解决的办法就是keep single ...

    SQLite_Expert_Professional_3.1.9_XiaZaiBa.exe

    SQLite_Expert_Professional_3.1.9_XiaZaiBa.exe

    android-sqlite-database.rar_android_android database

    标题“android-sqlite-database.rar”和描述中提到的“Android平台上,绑定了SQLite数据库”,暗示了这个压缩包可能包含了关于在Android系统上使用SQLite数据库的详细教程或资料。 SQLite在Android中的应用: 1. **...

    Sqlite3重编译版本,支持Sqlite3_key和Sqlite3_rekey方法.rar

    SQLite3是一种轻量级、自包含的数据库引擎,广泛应用于嵌入式系统和移动应用中。这个压缩包文件提供了一个特别的SQLite3版本,它经过了重编译,增加了对`Sqlite3_key`和`Sqlite3_rekey`方法的支持。这两个方法是关于...

    test-sqlite3.zip_linux sqlite_sqlite_sqlite 多线程_sqlite3_sqlite3

    标题中的“test-sqlite3.zip_linux sqlite_sqlite_sqlite 多线程_sqlite3_sqlite3”暗示了这是一个关于SQLite在Linux环境下的多线程应用的压缩包,其中可能包含了一个测试数据库(test_db2.c)以及SQLite的源代码...

    Sqlite_Class.rar_class_sqlite_sqlite class_sqlite 类_sqlite3x_con

    `sqlite_class` 和 `sqlite_类` 这两个标签可能指的是这个类库中的核心类,它们可能包含了创建、查询、更新和删除数据库记录的方法。这些类通常会包含如打开数据库连接、执行 SQL 语句、处理结果集等功能。`sqlite3x...

    SQLite_Test.zip_C SQLITE_SQLite 操作_sqlite_sqlite C_sqlite_test

    本示例"SQLite_Test.zip"包含了使用C语言进行SQLite数据库操作的代码实例,帮助开发者了解如何在C程序中集成SQLite进行数据存储和查询。 在C语言中,与SQLite交互通常涉及以下步骤: 1. **初始化SQLite库**: 在...

    SQLite_Expert_Professional_3.1.9_XiaZaiBa.rar

    在SQLite_Expert_Professional_3.1.9_XiaZaiBa.rar这个压缩包中,主要包含了一个名为SQLite_Expert_Professional_3.1.9_XiaZaiBa.exe的可执行文件。这通常意味着它是Windows操作系统上的安装程序,用于在电脑上安装...

    vc++SQLite编程.zip_VC sqlite _sqlite vc_tonegdr_wince SQLite 编程_wi

    在Windows CE(Wince)平台上,SQLite是一种常用的轻量级数据库引擎,用于处理本地数据存储。SQLite具有跨平台性、高效能和易于集成的特点,因此在嵌入式系统开发,尤其是VC++(Visual C++)项目中,它是一个理想的...

    sqlite_test.rar_linux sqlite_sqlite_sqlite_test_tiny6410

    标题中的"sqlite_test.rar_linux sqlite_sqlite_sqlite_test_tiny6410"表明这是一个针对Linux平台、使用SQLite数据库,并且在tiny6410开发板上进行测试的应用程序。tiny6410开发板通常用于嵌入式系统开发,具有小巧...

    sqlite-autoconf.tar.gz_sqlite_sqlite 加密_sqlite3autoconf_wxsqlite

    在标题"sqlite-autoconf.tar.gz_sqlite_sqlite 加密_sqlite3autoconf_wxsqlite"中,我们可以看到与 SQLite 相关的几个关键点:加密、sqlite3autoconf 和 wxSQLite。 1. **SQLite 加密**: SQLite 提供了一个可选的...

    sqlite-3.7.17-8.el7_7.1.x86_64.rpm

    官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装

    Android SQLite Database Tutorial_sql_android_

    在Android开发中,SQLite是一个重要的组成部分,它是轻量级的关系型数据库管理系统,广泛...查阅《Android SQLite Database Tutorial.pdf》文件,将提供更详细的操作示例和最佳实践,帮助你更好地掌握这一核心技术。

    sqlite3_key

    总的来说,"sqlite3_key" 是 SQLite3 数据库加密的关键,而 wssqlite 是一个尝试解决这个问题的工具。虽然使用过程中可能遇到挑战,但通过正确的配置和调试,我们可以为 SQLite3 添加强大的加密功能,保护数据免受...

    hcbus4sqlite.rar_hcbus4sqlite_php sqlite_sqlite_sqlite php

    标题 "hcbus4sqlite.rar_hcbus4sqlite_php sqlite_sqlite_sqlite php" 提供了一个关于使用PHP语言开发的公交站程序的信息,该程序基于SQLite数据库,并且是开源的。描述进一步确认了这个程序使用SQLite作为数据存储...

    sqlite-3_5_9.zip_sqlite_sqlite-3_5_1

    在提供的"sqlite-3_5_9.zip_sqlite_sqlite-3_5_1"压缩包中,包含了SQLite的某个早期版本——3.5.9。 SQLite 3.5.9是SQLite历史上的一个稳定版本,它具备了基本的SQL支持,包括数据定义语言(DDL)、数据操作语言...

Global site tag (gtag.js) - Google Analytics