sqlite 出现 data locked 是什么原因

 我来答
就烦条0o
2016-04-16 · 知道合伙人软件行家
就烦条0o
知道合伙人软件行家
采纳数:33315 获赞数:46487
从事多年系统运维,喜欢编写各种小程序和脚本。

向TA提问 私信TA
展开全部
unable to close due to unfinalised statements,Qt的SQL模块的问题

unable to close due to unfinalised statements,Qt的SQL模块的问题

造成“unable to close due to unfinalised statements”错误的原因有狠多,本座这里说的是QT的问题。

SQLITE要求,在关闭数据库之前,所有活跃的查询都要终结掉。如果在终结掉那些查询之前就关闭数据库,则关闭操作会失败,并且得到“unable to close due to unfinalised statements”这样的错误。

QT的SQLITE驱动有漏洞,API并没有提供对应的函数来让程序猿显式地终结那些活跃状态的查询对象,而用来关闭数据库连接的
QSqlDatebase::close函数又不做这些终结操作。这样就导致某些(其实狠频繁地出现)情况下无法关闭SQLITE数据库,文件描述符被继
续占用着。而再又打开SQLITE数据库的话,又增加咯程序打开的文件描述符的数量,并且也不能关闭。如此下去,直到文件描述符达到系统限制,终于无法再
连接到SQLITE数据库咯。本座今天碰到的就是这样的问题,从/proc伪文件系统中看到自己的程序打开咯1024个文件,其中绝大部分都是某个
SQLITE数据库文件。

参考这里:https://codereview.qt-project.org/#change,20121

据说QT开发者在QT4.8.2中已经解决咯这个问题,有条件的哥哥们可以升级到QT4.8.2试试,本座目前用的是QT4.8.1,要等到QtSDK中的QT版本升级到4.8.2才能升级。像本座这样没条件升级的哥哥就要用另外的办法来绕过咯。

要绕过也简单,对于同一个SQLITE数据库,在程序中打开一个SQLITE数据库连接之后,一直用这个连接,不再关闭,到最后程序退出的时候再关闭SQLITE连接。那个时候,在关闭之前销毁所有存在的查询对象,就可以正常关闭SQLITE数据库咯。

总之,在升级到QT4.8.2之前,不要频繁关闭SQLITE数据库,那是无用功。
SQLite做为客户端应该很给力,但如果做为服务端应用,在并发处理上会伤感情的。
ZESTRON
2024-09-04 广告
在Dr. O.K. Wack Chemie GmbH,我们高度重视ZESTRON的表界面分析技术。该技术通过深入研究材料表面与界面的性质,为提升产品质量与可靠性提供了有力支持。ZESTRON的表界面分析不仅涵盖了相变化、化学反应、吸附与解吸... 点击进入详情页
本回答由ZESTRON提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式