早上来公司,测试部的同事说测试多用户并发操作时遇到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 locked问题
解决sqlite3 databaselocked 问题的代码实例,比较有参考价值。
基于sqlite-amalgamation-3280000和wxsqlite3-3.3.1重编译版本,支持Sqlite3_key和Sqlite3_rekey方法
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_...
如果多线程同时读写(这里的指不同的线程用使用的是不同的Helper实例),后面的就会遇到android.database.sqlite.SQLiteException: database is locked这样的异常。对于这样的问题,解决的办法就是keep single ...
SQLite_Expert_Professional_3.1.9_XiaZaiBa.exe
android 开发专用 安卓开发专用 SQLite_Expert_Professional_3.1.9_XiaZaiBa.rar
Android平台上,绑定了SQLite数据库,这个数据库系统也是极具性格的,它的最大的应用场景是嵌入式系统,进一步了解可以参看
官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装
Sqlite_Class 的C++类库
SQLite_Test是实现sqlite数据库等基本操作的例子
sqlite-amalgamation-3_7_0.zip"sqlite-amalgamation-3_7_0.zip
SQLITE_BUSY = 5; 数据库文件被锁 SQLITE_LOCKED = 6; 数据库中的一个表被锁 SQLITE_NOMEM = 7; 内存分配失败 SQLITE_READONLY = 8; 试图对一个只读数据库进行写操作 SQLITE_INTERRUPT = 9; 由sqlite_interrupt...
Wince SQLite 数据库编程 工程文件CPP
linux sqlite多线程读写源代码
解决以下问题 1.sqlite not found 2.CANNOT LINK EXECUTABLE: cannot locate symbol "sqlite3_enable_load_extension" referenced by "sqlite3" 适用于android 5.0 API 21版本,使用方法 1. 包含3个文件 sqlite3,...
android sqllite using tutorial
Arm Linux平台下,sqlite数据库的全部文件,包括源代码、库文件。可直接在arm+linux中使用
sqlite_docs_3_6_11.zip