4

我刚刚开始使用 SQLite,我想将我所有的应用程序数据写入一个文件,不知道该文件是否已经存在;对于“普通”文件,这很简单,但是对于 SQLite,如果表已经存在,我将无法创建表,如果主键已经存在,我将无法插入行。

我基本上想做类似“CREATE TABLE IF NOT EXISTS table..else...DELETE FROM table”之类的事情。必须有办法做到这一点,我怀疑有些方法比其他方法更有效。例如,您会认为使用现有表而不是删除和重新创建会更好,但这取决于检查它是否存在和删除其内容所涉及的内容。

或者,有没有办法将数据库写入内存(sqlite3_open(“:memory:”,db)),然后获取其内容 - 作为字节数组或其他内容 - 写入文件?

4

3 回答 3

8

对于所有数据库系统,首先删除表然后重新创建它几乎总是更有效。使用 DELETE 将需要索引更新等,而简单的 DROP 也会删除索引,并且不会涉及创建事务日志条目 对于 SQLite,您可以执行 DROP IF EXISTS 有条件地删除表。

于 2009-12-15T10:55:34.670 回答
1

在某个地方准备好一个空的、完全设计好的数据库文件怎么样。那么,如果预期的app数据数据库不存在,通过复制空的db文件来创建呢?

于 2009-12-15T10:55:37.307 回答
1

如果您要在将应用程序数据写回之前的某个时间点读取应用程序数据(例如用户设置),您将知道数据是否存在。尝试调用包含在异常处理中的表,您会知道它们是否存在 - 或者使用数据库表来告诉您存在什么:

SELECT name FROM sqlite_master
WHERE type='table'
ORDER BY name;

如果您只想覆盖现有的 db 文件,您可以轻松地从磁盘中删除 db 文件,然后运行您的创建代码 - 简单 - 无需在任何地方使用 drop 调用。不用担心版本之间的数据库发生变化。

于 2009-12-15T11:01:09.377 回答