微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

SQLite的 cannot commit - no transaction is active报错

最近测试sqlite时遇到了一个奇怪的问题,我在大批量循环插入记录时偶然会报告“cannot commit - no transaction is active”错误,多次尝试仍然如此,代码如下:

...

for (int j=0;j<100000;j++)
{

rc = sqlite3_exec(db,"BEGIN TRANSACTION;",NULL,&errMsg);
for (int i=0;i<1000;i++)
{
strsql.Format("INSERT INTO students VALUES(%d,%d,'%30d');",j,i,j*10000+i);
rc = sqlite3_exec(db,strsql,&errMsg);
}
strsql = "COMMIT TRANSACTION;";

rc = sqlite3_exec(db,&errMsg);

}

...

后来,我发现每当报告“cannot commit - no transaction is active”错误前,还会报告一个“database or disk is full”错误,该错误是"INSERT INTO students VALUES(%d,时报告的,但事实上,我的硬盘空间很足,sqlite不是独占数据库访问吗?疑惑之下我到网上搜索了一番,发现可能是Window文件系统问题或杀毒软件影响^.^,看来暂时没办法解决了,只能自己写好出错处理或期待sqlite出新版解决该BUG了。

原文地址:https://www.jb51.cc/sqlite/203198.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐