SQLite的 cannot commit - no transaction is active报错

本文介绍了一个在使用SQLite进行大量数据插入时遇到的“cannot commit-no transaction is active”错误,并分享了错误出现前的“database or disk is full”提示及可能的原因。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

... 

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

  rc = sqlite3_exec(db, "BEGIN TRANSACTION;", NULL, 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, NULL, NULL, &errMsg);
  }
  strSQL = "COMMIT TRANSACTION;";  

  rc = sqlite3_exec(db, strSQL, NULL, NULL, &errMsg);

}

...
 

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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值