我有两个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/

10-12 12:43
查看更多