sqlite3 - скрипт не получает изменения в таблице, пока скрипт не будет перезапущен - PullRequest
2 голосов
/ 17 ноября 2011

У меня есть две программы на Си, обе используют библиотеку sqlite3.

1 - Одна вставляет строку в таблицу

2 - У другой есть цикл while, ожидающий, пока строка не будетпомещается в ту же таблицу (программа заканчивается, когда находит строку).

Если я запускаю программу цикла while, а затем вставляю строку с первой программой, программа цикла while не видит строку.Я могу запустить программу в другом терминале одновременно, ПОСЛЕ того, как она была вставлена, и она находит ее с 1-й попытки.

Мои запросы верны.

Я не блокирую базу данных правильно или что-то еще?Каждое утверждение закрывало БД с помощью sqlite3_close () и PRAGMA синхронно = FULL (2).

Вот мой код: http://pastebin.com/qRATMJku

Спасибо за помощь.

1 Ответ

0 голосов
/ 06 декабря 2011

Вы можете попробовать следующий код:

вставка строки типа: (со значением второго столбца = '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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...