Я изучаю, как использовать библиотеку sqlite3 для c ++, и пока все хорошо, что мне удалось выполнить запросы SELECT и создать новые таблицы, но кажется, что обновление / вставка не работает:
Как пробный тест, я использую запрос stati c (без переменных):
int rc {0};
char *zErrMsg {0};
sql = "UPDATE tag_list set name = 'foo' where ID=16; " \
"SELECT * from tag_list";
rc = sqlite3_exec(this->db_ptr, sql, callback, (void*)data, &zErrMsg);
if( rc != SQLITE_OK ) {
fprintf(stderr, "SQL error: %s\n", zErrMsg);
sqlite3_free(zErrMsg);
} else {
fprintf(stdout, "Operation done successfully\n");
}
Моя функция обратного вызова:
static int callback(void *data, int argc, char **argv, char **azColName){
int i;
fprintf(stderr, "%s: ", (const char*)data);
for(i = 0; i<argc; i++) {
printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL");
}
printf("\n");
return 0;
}
Вывод:
id = 14
name = computer
last_update = 123
id = 16
name = foo
last_update = 1
Operation done successfully
Когда я запрашиваю базу данных напрямую, это то, что я получаю:
╔════╦══════════╦═════════════╗
║ ID ║ name ║ Last_update ║
╠════╬══════════╬═════════════╣
║ 14 ║ computer ║ 123 ║
║ 16 ║ s ║ 1 ║
╚════╩══════════╩═════════════╝
Я проверил с помощью sqlite3_get_autocommit, и он вернул 1, что, как я понял, означает, что это автоматическая фиксация.
Я могу обновлять строки извне, это просто происходит в коде.
tl; dr: я пытаюсь обновить имя в созданной мной таблице, но похоже, что изменение не передается.
Я надеюсь, что кто-то с большим опытом сталкивался с этим раньше и знает, как это обойти.