在Android中预先填充数据库的最快,最有效的方法

caw*_*caw 13 sql database sqlite android

如果你想在Android中预先填充数据库(SQLite),这并不像人们想象的那么容易.

所以我发现这个教程也经常在Stack Overflow上引用.

但是我不喜欢这种预先填充数据库的方式,因为你从数据库处理程序中获取控件并自己创建文件.我宁愿不触摸文件系统,让数据库处理程序自己完成所有事情.

所以我认为可以做的就是像往常一样在数据库处理程序的onCreate()中创建数据库,然后从/ assets加载一个文件(.sql),其中包含要填充值的语句:

INSERT INTO testTable (name, pet) VALUES ('Mike', 'Tiger');
INSERT INTO testTable (name, pet) VALUES ('Tom', 'Cat');
...
Run Code Online (Sandbox Code Playgroud)

但是在处理程序的onCreate()中调用execSQL()并不能真正起作用.似乎/ assets文件的大小不得超过1MB,而execSQL()只执行第一个语句(Mike-Tiger).

你会做什么做预先填充数据库?

NuS*_*ler 5

我建议如下:

  1. 将所有INSERT逻辑包装到事务中(BEGIN... COMMIT或通过beginTransaction() ... endTransaction() API)
  2. 如前所述,使用绑定API和回收对象.
  3. 批量插入完成之前,不要创建任何索引.

另外看一下sqlite3中的Faster批量插入?