DBMNG数据库管理与应用

抓住自己最有兴趣的东西,由浅入深,循序渐进地学……
当前位置:首页 > SQLite > 常见问题

sqlite报SQLITE_LOCKED"Databasetableislocked"

今天调了一天程序,最后远程的ORACLE都好,做下压力测试.惊奇的发现SQLITE报错..

说什么数据表锁了.....

 

结果调到了现在...很是郁闷.

 

情况如下:

每个线程打开自己的SQLITE连接.线程间不混用.

 


1if(sqlite3_open_v2(strdb, \2db, \3SQLITE_OPEN_READWRITE|\4SQLITE_OPEN_CREATE|\5SQLITE_OPEN_NOMUTEX|\6SQLITE_OPEN_SHAREDCACHE, \7NULL)!=SQLITE_OK)8{9fprintf(stderr,"sqlite3_open: %s\n", sqlite3_errmsg(*db));10return-1;11}
 

其中,SQLITE_OPEN_FULLMUTEX,SQLITE_OPEN_SHAREDCACHE都不行.我试过了.

 

A线程往T1插数据.里面用到了事务.并不长.

B线程往T2插数据.也用到了事务.也不长.

 

但是,AB之间插入时间是随机的.我发现,只是要A往T1插数据,紧跟着B往T2插数据.就一定会报错.

反之一样.

我又试了一下,A往T1插数据.启用事务. B往T2插数据.不启用事务.循环插入(暂不考虑效率)  一样报错...报的错也一样..

 

这觉得SQLITE没有真正的线程安全. 它没有做到SESSION这一级.只是连接式的线程安全.

后来在应该程序里..把两个事务用锁隔开.解决问题..记录之

很开心,希望能对别人有用.

from:http://www.cnblogs.com/javado/archive/2010/12/03/1895055.html

本站文章内容,部分来自于互联网,若侵犯了您的权益,请致邮件chuanghui423#sohu.com(请将#换为@)联系,我们会尽快核实后删除。
Copyright © 2006-2023 DBMNG.COM All Rights Reserved. Powered by DEVSOARTECH            豫ICP备11002312号-2

豫公网安备 41010502002439号