sqlite3 - 除非重新启动脚本,否则脚本不会对表进行更改

时间:2011-11-17 06:41:09

标签: c sqlite

我有两个C程序,都使用sqlite3库。

1 - One在表中插入一行

2 - 另一个有一个while循环,等待一行被放入同一个表中(程序在找到一行时结束)。

如果我启动while循环程序,然后使用第一个程序插入行,则while循环程序不会看到该行。我可以同时在另一个终端中运行该程序,在插入之后,它会第一次尝试。

我的查询是正确的。

我没有正确锁定数据库或其他什么?每个语句都使用sqlite3_close()和PRAGMA synchronous = FULL(2)关闭数据库。

这是我的代码:http://pastebin.com/qRATMJku

感谢您的帮助。

1 个答案:

答案 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);
}