我有两个C程序,都使用sqlite3库。
1 - One在表中插入一行
2 - 另一个有一个while循环,等待一行被放入同一个表中(程序在找到一行时结束)。
如果我启动while循环程序,然后使用第一个程序插入行,则while循环程序不会看到该行。我可以同时在另一个终端中运行该程序,在插入之后,它会第一次尝试。
我的查询是正确的。
我没有正确锁定数据库或其他什么?每个语句都使用sqlite3_close()和PRAGMA synchronous = FULL(2)关闭数据库。
这是我的代码:http://pastebin.com/qRATMJku
感谢您的帮助。
答案 0 :(得分:0)
您可以尝试以下代码:
插入一行,如:(第二列的值='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);
}