sqlite数据库插入数据出现SQLITE_ERROR[1]:SQL logic error or missing database

时间:2021-09-22 22:49:15
在每隔100毫秒向数据库插入数据时,有时候会出现:SQLITE_ERROR[1]:SQL logic error or missing database错误。是为什么?

8 个解决方案

#1


确保100ms以内你的数据能完全插入进去?

#2


引用 1 楼 iihero 的回复:
确保100ms以内你的数据能完全插入进去?


100ms时间够吧,只是简单地插入数据
wsprintf(sCmd,_T("insert into InfoDB values(%d,'%s','%s','%s','%s')"),info->iNo,info->sTitle,info->sSender,info->sTime,info->sText);
db.execDML(sCmd);//执行命令

当连续插入100条时不会出现这种错误,但是当插入500或1000时就会出现这种情况。
部分代码如下:
for(i=0;i<500;i++)//i<1000
{
k=i+1;
InfoList.iNo=k;
InfoDB.AddList(&InfoList);//执行插入数据命令函数,InfoList是存数据
Sleep(100);//休眠100ms
}

#3


你如果在循环开始之前,执行:
db.execDML("begin transaction");

循环结束之后,再执行:
db.execDML("commit")
就不会有问题了。
否则,每次执行insert,都隐含提交事务,频繁打开文件,速度会越来越慢。最后很可能就出错。

#4


使用事务没有,提交没有?

#5


是不是几个线程使用同一个handle在操作?搞个锁,其实即使单线程用下事务,那个性能也已经足够了。

#6


像这种大数据的插入最好开事务。

#7


引用 4 楼  的回复:
使用事务没有,提交没有?

我的数据库每70s左右插入一条记录,需要使用事务吗?

#8


http://topic.csdn.net/u/20100704/12/833a9b04-1a7e-478b-87c1-57543f029795.html
你可以参考下这个帖子。

#1


确保100ms以内你的数据能完全插入进去?

#2


引用 1 楼 iihero 的回复:
确保100ms以内你的数据能完全插入进去?


100ms时间够吧,只是简单地插入数据
wsprintf(sCmd,_T("insert into InfoDB values(%d,'%s','%s','%s','%s')"),info->iNo,info->sTitle,info->sSender,info->sTime,info->sText);
db.execDML(sCmd);//执行命令

当连续插入100条时不会出现这种错误,但是当插入500或1000时就会出现这种情况。
部分代码如下:
for(i=0;i<500;i++)//i<1000
{
k=i+1;
InfoList.iNo=k;
InfoDB.AddList(&InfoList);//执行插入数据命令函数,InfoList是存数据
Sleep(100);//休眠100ms
}

#3


你如果在循环开始之前,执行:
db.execDML("begin transaction");

循环结束之后,再执行:
db.execDML("commit")
就不会有问题了。
否则,每次执行insert,都隐含提交事务,频繁打开文件,速度会越来越慢。最后很可能就出错。

#4


使用事务没有,提交没有?

#5


是不是几个线程使用同一个handle在操作?搞个锁,其实即使单线程用下事务,那个性能也已经足够了。

#6


像这种大数据的插入最好开事务。

#7


引用 4 楼  的回复:
使用事务没有,提交没有?

我的数据库每70s左右插入一条记录,需要使用事务吗?

#8


http://topic.csdn.net/u/20100704/12/833a9b04-1a7e-478b-87c1-57543f029795.html
你可以参考下这个帖子。