2015-04-30 57 views
0

我有一个应用程序可以将多个(100个)行插入或更新到表中。在我的应用程序中一次只能运行一个线程。在每次插入/更新几个函数之前,每行都会被计算和检查。确保安全的SQLite数据库操作(不是指线程安全的)

我担心,如果应用程序在插入行开始和结束之间中断,我的数据将被损坏/不完整。这可能发生吗?

我尝试了几次用主键中断进程,但没有,但这并不是穷举方法。

我正在实施这里讨论的单例方法:Is Sqlite Database instance thread safe但这并没有解决我的问题。

+1

在所有UPDATE和INSERT中使用[transaction](https://www.sqlite.org/lang_transaction.html)。 –

+0

如果我单独插入200多行,则围绕所有更新和插入的事务将不起作用。我想出了正确的方法(我认为)。将所有行信息放入一个数组列表中,然后在开始和结束事务之间放置一个循环以插入所有行。感谢您的评论,但它指出了我的正确方向。 – rnorman3

+0

如果您不想使用交易,您为什么接受建议交易的答案? –

回答

1

From the fine manual。 。 。

事务数据库是其中 出现的所有变化和查询是原子性,一致性,隔离的和持久(ACID)。 SQLite 实现了可序列化的事务,它们是原子性的,一致的,即使事务被 程序崩溃,操作系统崩溃或 计算机的电源故障中断,也是持久的。

如果要执行多个几百个SQL语句,你需要知道,无论是)所有这些承诺,或者b)他们没有承诺的,换一个transaction内的所有这些SQL语句。