Существует ли какая-либо альтернатива sqlite API (C API) BEGIN TRANSACTION и COMMIT? - PullRequest
2 голосов
/ 17 октября 2019

В sqlite мы можем выполнить BEGIN TRANSACTION, а затем COMMIT после любого обновления или операции вставки, чтобы обеспечить элементарную особенность баз данных. Могу ли я добиться того же, используя API sqlite C?

Например:

*BEGIN TRANSACTION;

UPDATE accounts
   SET balance = balance - 1000
 WHERE account_no = 100;

UPDATE accounts
   SET balance = balance + 1000
 WHERE account_no = 200;

INSERT INTO account_changes(account_no,flag,amount,changed_at) 
VALUES(100,'-',1000,datetime('now'));

INSERT INTO account_changes(account_no,flag,amount,changed_at) 
VALUES(200,'+',1000,datetime('now'));

COMMIT;*

Я хочу сделать это выше в программе C / C ++ с использованием API C / C ++ sqlite

1 Ответ

1 голос
/ 17 октября 2019

API ниже c можно использовать для выполнения любого правильно сформированного оператора sql.

int sqlite3_exec(
  sqlite3*,                                  /* An open database */
  const char *sql,                           /* SQL to be evaluated */
  int (*callback)(void*,int,char**,char**),  /* Callback function */
  void *,                                    /* 1st argument to callback */
  char **errmsg                              /* Error msg written here */
);

Например, для начала транзакции

sqlite3_exec(db, "BEGIN TRANSACTION;", NULL, NULL, NULL);

Для фиксации транзакции

sqlite3_exec(db, "END TRANSACTION;", NULL, NULL, NULL);

Где db - ваше sql соединение.

Примечание :: END TRANSACTION это просто псевдоним для COMMIT.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...