如何在首次运行时填充大型sqlite数据库

时间:2013-08-07 12:27:55

标签: java android database sqlite csv

我正在开发一个基于SQLite数据库的字典应用程序,其中包含超过300,000行。

问题是最终形式的数据库文件由全文索引表组成,并且重量超过 150Mb

我设法通过创建无内容的fts4表将.db文件大小降到最低。 数据库不能是任何小的。我还设法将预先填充的数据库放在应用程序中,它运行正常。

问题是我不能将最终的.db文件保存在/ assets中并在第一次运行时将其复制到sdcard,因为它太大了。我也不想在第一次运行时下载它。

批量INSERT数据,即使事务和sqlite已优化且开始时没有索引永远,所以它也不是一个选项。

好处是用于构建数据库的原始数据(CSV格式并且已压缩) 30Mb 且sqlite的命令行.import选项非常快(~1s中100,000行) )但是......没有root权限就无法从应用程序访问它。

我希望将应用程序与/ assets中的压缩CSV文件捆绑在一起,解压缩,在SD卡上创建数据库,然后导入CSV,但似乎对我来说是不可能的。虽然有很多字典应用程序似乎正在做这件事。 (下载的应用程序是十几兆字节,首次运行时构建数据库,并在SD卡上占用数百兆字节的空间)。

我如何做到这一点?

过去两周我一直在研究这个问题,而且我的想法已经用完了。我是Android开发的新手,所以任何帮助都会非常感激。

2 个答案:

答案 0 :(得分:2)

  • 计划A:发送压缩的SQLite数据库文件并在安装后解压缩;你应该能够省略索引并在以后重建它们。
  • 计划B:将CSV导入程序的相关部分复制到您的应用程序中,运送压缩的CSV文件并将其加载到空数据库中,就像命令行工具一样。 Official documentation page.

答案 1 :(得分:0)

将整个内容创建到csv文件中,可能是多个csv文件并压缩成zip。我在压缩后检查了32 MB的csv文件,文件变为482KB。

例如

data1.csv data2.csv data3.csv data4.csv data5.csv

将文件压缩成data.zip并将文件放入资产文件夹,导入时 - 逐个从zip中提取文件并插入到sqlite db中。