2009-12-15 208 views
4

我刚刚开始使用SQLite,我想将所有应用程序数据写入文件,不知道文件是否已经存在;与'普通'文件,这是很简单,但SQLite我不能创建一个表,如果它已经存在,并且我不能插入一行,如果主键已经存在。如何覆盖SQLite文件的内容

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

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

回答

7

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

1

如何在某处准备一个空的,设计完全的数据库文件呢?那么,如果预期的应用程序数据数据库不存在,请通过复制空白数据库文件来创建它?

1

如果您要在写回应用程序数据之前(例如用户设置)读取应用程序数据,您将知道数据是否存在。尽量裹在异常处理表调用和如果存在的话,你就会知道 - 或者使用数据库表来告诉你什么存在:

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

如果你只有每只想覆盖现有的数据库文件,你可以很容易地从磁盘上删除数据库文件,然后运行你的创建代码 - 简单 - 不用在任何地方拖放调用。不用担心在版本之间更改数据库。