sqlite 我是否需要在一个字符串中处理多个查询的事务?

kupeojn6  于 2022-11-15  发布在  SQLite
关注(0)|答案(1)|浏览(143)

https://github.com/SRombauts/SQLiteCpp

SQLite::Database    db("example.db3");
while(...)
{
    db.exec("INSERT INTO xxx VALUES(...)");
}

这是SQLite用于插入数据的示例代码。如果没有事务,则每个db.exec都很慢,几乎需要1秒。
因此,您需要一个事务:

db.exe("BEGIN");
while(...)
{
    db.exec("INSERT INTO xxx VALUES(...)");
}
db.exe("END");

但如果我将所有查询都放在一个字符串中:

db.exec("INSERT INTO xxx VALUES(...);\
INSERT INTO xxx VALUES(...);\
INSERT INTO xxx VALUES(...);\
...
");

我还需要交易吗?

v6ylcynt

v6ylcynt1#

如果你想插入‘一切’或‘什么都没有’,那么,是的。你仍然需要一笔交易。在没有事务的情况下,SQLite::Database::exec()内部调用sqlite3_exec()和分号分隔的SQL语句将不会自动执行。

相关问题