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

// if error
sqlite3_exec(db, "ROLLBACK;", NULL, NULL, NULL);

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

如果中間發生錯誤,就單做 ROLLBACK 就好, 不需要再做 END TRANSACTION,下面 ref 第二篇裡面的邏輯有點問題,做了 ROLLBACK 然後 break 出去之後又做 COMMIT,怪怪的。

Ref: