我有两个C程序,都使用sqlite3库。
1-向表中插入一行
另一个有一个while循环,等待将一行放入同一个表中(程序在找到行时结束)。
如果我启动while循环程序,然后用第一个程序插入行,while循环程序就看不到行。我可以在另一个终端同时运行程序,在它被插入后,它会第一次尝试找到它。
我的问题是正确的。
我没有正确锁定数据库吗每条语句都使用sqlite3_close()和PRAGMA synchronous=FULL(2)关闭数据库。
这是我的代码:http://pastebin.com/qRATMJku
谢谢你的帮助。
最佳答案
您可以尝试以下代码:
插入如下行:(第二列的值为'123')
char query[] = INSERT INTO tablename ('msg', 'sid') VALUES ('msgvalue', '123')
会打破循环
#include <stdio.h>
#include <sqlite3.h>
#include <stdlib.h>
int callback (void *a,int ac,char **av,char **column) {
if (ac == 2 && av[1] && atoi(av[1]) == 123) // expect av[1] to be '123'
*(char *) a = 1;
}
int main(void) {
sqlite3_stmt *stmt;
sqlite3 *handle;
char query[] = "SELECT * FROM tablename";
char found = 0;
if(sqlite3_open("/tmp/sampledb.sqlite3",&handle))
exit(1);
for(;;) {
sqlite3_exec(handle,query,callback,&found,NULL);
if (found)
break;
printf("sleeping\n");
sleep(1);
}
sqlite3_close(handle);
}
关于c - sqlite3-除非重新启动脚本,否则脚本不会更改表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8163108/