sqlite报SQLITE_LOCKED "Database table is locked"
2010-12-03 00:25
417 查看
今天调了一天程序,最后远程的ORACLE都好,做下压力测试.惊奇的发现SQLITE报错..
说什么数据表锁了.....
结果调到了现在...很是郁闷.
情况如下:
每个线程打开自己的SQLITE连接.线程间不混用.
其中,SQLITE_OPEN_FULLMUTEX,SQLITE_OPEN_SHAREDCACHE都不行.我试过了.
A线程往T1插数据.里面用到了事务.并不长.
B线程往T2插数据.也用到了事务.也不长.
但是,AB之间插入时间是随机的.我发现,只是要A往T1插数据,紧跟着B往T2插数据.就一定会报错.
反之一样.
我又试了一下,A往T1插数据.启用事务. B往T2插数据.不启用事务.循环插入(暂不考虑效率) 一样报错...报的错也一样..
这觉得SQLITE没有真正的线程安全. 它没有做到SESSION这一级.只是连接式的线程安全.
后来在应该程序里..把两个事务用锁隔开.解决问题..记录之
很开心,希望能对别人有用.
说什么数据表锁了.....
结果调到了现在...很是郁闷.
情况如下:
每个线程打开自己的SQLITE连接.线程间不混用.
if (sqlite3_open_v2(strdb, \ db, \ SQLITE_OPEN_READWRITE | \ SQLITE_OPEN_CREATE | \ SQLITE_OPEN_NOMUTEX | \ SQLITE_OPEN_SHAREDCACHE, \ NULL) != SQLITE_OK) { fprintf(stderr, "sqlite3_open: %s\n", sqlite3_errmsg(*db)); return -1; }
其中,SQLITE_OPEN_FULLMUTEX,SQLITE_OPEN_SHAREDCACHE都不行.我试过了.
A线程往T1插数据.里面用到了事务.并不长.
B线程往T2插数据.也用到了事务.也不长.
但是,AB之间插入时间是随机的.我发现,只是要A往T1插数据,紧跟着B往T2插数据.就一定会报错.
反之一样.
我又试了一下,A往T1插数据.启用事务. B往T2插数据.不启用事务.循环插入(暂不考虑效率) 一样报错...报的错也一样..
这觉得SQLITE没有真正的线程安全. 它没有做到SESSION这一级.只是连接式的线程安全.
后来在应该程序里..把两个事务用锁隔开.解决问题..记录之
很开心,希望能对别人有用.
相关文章推荐
- sqlite3解决A table inthe database is locked
- 关于sqlite中的一个错误 “database is locked"
- SQLiteException: database is locked异常的解决办法
- 解决SQLite中的 database is locked
- ios sqlite database is locked
- sqlite database is locked
- 解决SQLite中的 database is locked
- database is locked和SQLITE_BUSY
- android.database.sqlite.SQLiteDatabaseLockedException: database is locked (code 5): , while compilin
- sqlite3 database is locked 问题解决方案
- sqlite遇到database is locked问题的完美解决方案
- SQLiteDatabaseLockedException: database is locked 解决方法
- 解决SQLite database is locked
- sqlite3---The database file is locked
- C#出现sqlite的database is locked的解决方法
- 安卓数据库连接解决办法 ,避免 sqlite3 database is locked
- sqlite遇到database is locked问题的完美解决
- Android SQLite database is locked
- sqlite3 database file is locked
- 解决django的sqlite3的database is locked