【问题标题】:Is there any sqlite API (C API) alternative to BEGIN TRANSACTION and COMMIT是否有任何 sqlite API (C API) 替代 BEGIN TRANSACTION 和 COMMIT
【发布时间】:2020-02-14 06:48:51
【问题描述】:

在 sqlite 中,我们可以在任何更新或插入操作之后执行 BEGIN TRANSACTION 然后 COMMIT 以确保数据库的原子特性。我可以使用 sqlite C API 实现相同的目标吗?

例如:

*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++ 程序中使用 sqlite 的 C/C++ API 完成上述操作

【问题讨论】:

  • 您不能在 C 程序中使用 C++ API。
  • @ThomasSablik,我不想专门在C程序中做,我只想知道C或C++中有没有API
  • 呃。您只需像执行任何 sql 语句一样执行它们...sqlite3_exec() 效果很好,因为它们不返回任何内容并且不需要任何绑定到参数的值。
  • “我想在 C 程序中使用 sqlite 的 C/C++ API 执行上述操作” 您的问题应该包含所有必要的信息。不要在 cmets 中更改您的问题。编辑您的问题。

标签: c++ sql c database sqlite


【解决方案1】:

您可以使用下面的c API 来执行任何格式正确的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 的别名。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-18
    • 2017-09-16
    • 2012-10-05
    相关资源
    最近更新 更多