早上来公司,测试部的同事说测试多用户并发操作时遇到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"异常。在实际开发中,应当重视数据库的...
三、解决“database is locked”问题的步骤 1. **检查代码逻辑**:确保每次操作后都正确关闭连接和释放资源,避免事务悬空。 2. **优化事务管理**:尽量减少事务的粒度,尽快完成事务操作,避免长时间占用锁。 3. **...
然而,在多线程环境中,由于并发访问数据库,可能会遇到“database locked”(数据库被锁定)的问题。本文将深入探讨如何在Android中使用多线程操作SQLite并解决数据库被锁定的问题。 首先,理解“database locked...
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_...
SQLite3是一种轻量级、自包含的数据库引擎,广泛应用于嵌入式系统和移动应用中。这个压缩包文件提供了一个特别的SQLite3版本,它经过了重编译,增加了对`Sqlite3_key`和`Sqlite3_rekey`方法的支持。这两个方法是关于...
如果多线程同时读写(这里的指不同的线程用使用的是不同的Helper实例),后面的就会遇到android.database.sqlite.SQLiteException: database is locked这样的异常。对于这样的问题,解决的办法就是keep single ...
SQLite_Expert_Professional_3.1.9_XiaZaiBa.exe
标题“android-sqlite-database.rar”和描述中提到的“Android平台上,绑定了SQLite数据库”,暗示了这个压缩包可能包含了关于在Android系统上使用SQLite数据库的详细教程或资料。 SQLite在Android中的应用: 1. **...
标题中的“test-sqlite3.zip_linux sqlite_sqlite_sqlite 多线程_sqlite3_sqlite3”暗示了这是一个关于SQLite在Linux环境下的多线程应用的压缩包,其中可能包含了一个测试数据库(test_db2.c)以及SQLite的源代码...
本示例"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.exe的可执行文件。这通常意味着它是Windows操作系统上的安装程序,用于在电脑上安装...
在Windows CE(Wince)平台上,SQLite是一种常用的轻量级数据库引擎,用于处理本地数据存储。SQLite具有跨平台性、高效能和易于集成的特点,因此在嵌入式系统开发,尤其是VC++(Visual C++)项目中,它是一个理想的...
在标题"sqlite-autoconf.tar.gz_sqlite_sqlite 加密_sqlite3autoconf_wxsqlite"中,我们可以看到与 SQLite 相关的几个关键点:加密、sqlite3autoconf 和 wxSQLite。 1. **SQLite 加密**: SQLite 提供了一个可选的...
标题中的"sqlite_test.rar_linux sqlite_sqlite_sqlite_test_tiny6410"表明这是一个针对Linux平台、使用SQLite数据库,并且在tiny6410开发板上进行测试的应用程序。tiny6410开发板通常用于嵌入式系统开发,具有小巧...
官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装
在Android开发中,SQLite是一个重要的组成部分,它是轻量级的关系型数据库管理系统,广泛...查阅《Android SQLite Database Tutorial.pdf》文件,将提供更详细的操作示例和最佳实践,帮助你更好地掌握这一核心技术。
总的来说,"sqlite3_key" 是 SQLite3 数据库加密的关键,而 wssqlite 是一个尝试解决这个问题的工具。虽然使用过程中可能遇到挑战,但通过正确的配置和调试,我们可以为 SQLite3 添加强大的加密功能,保护数据免受...
标题 "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。 SQLite 3.5.9是SQLite历史上的一个稳定版本,它具备了基本的SQL支持,包括数据定义语言(DDL)、数据操作语言...
在标题中提到的"sqlite wince_wince sqlite_wince 数据库",指的是SQLite在Windows CE操作系统上的应用。Windows CE是一个微软开发的实时操作系统,常用于嵌入式设备,如掌上电脑、工业设备等。SQLite的这个版本特别...