从文件和SQLiteOpenHelper中读取SQL

时间:2012-11-17 05:42:31

标签: android android-sqlite

我需要在我的Android应用中包含现有的SQLiteDatabase,我还希望能够下载并安装新的数据库。我做了一些研究,我的第一个工作解决方案是from here。我不喜欢这个解决方案,首先,它假设数据库总是处于固定的路径和其他奇怪的地方。

因此,我没有将现有的数据库文件放在资产中,而是将数据库导出到SQL文件中,然后将其读入,然后在我onCreate()的{​​{1}}方法中,我调用了带有文件数据的打开SQLiteOpenHelper的新方法updateDatabase。 我遇到了一些问题,我认为我已经解决了,但我确信我没有想到所有问题,这些问题是:

  1. 调用DataInputStream的{​​{1}}方法时,数据库已创建,已打开,SQLiteOpenHelperonCreate。因此,如果导入的sql文件包含inTransaction(),则抛出异常,如果sql String包含创建true的语句,则会发生另一个异常。因此,我添加了使用BEGIN TRANSACTION查找这些关键字的简单搜索,并将'android_metadata' String.contains()设置为boolean以避免执行它们。所以问题是,是否有更好的SQL类或方法来过滤它,甚至是更好的正则表达式方法?

  2. 在SQL文件中出现意外换行的类似问题。我使用doExecute阅读文件并查找换行符,我只需在该行上使用false,然后检查readLine()。这对我的输入文件设置了一些约束,就像在一行上没有多个语句一样。那么,有没有更好的方法从文件中预处理SQL?

  3. 以下是我从String.trim()资源或下载中获得endsWith(";")后用于创建数据库的代码:

    DataInputStream

1 个答案:

答案 0 :(得分:1)

不想让你早早发现这些雄心勃勃和优雅的实施,但如果你已经制作了数据库并使用数据库浏览器进行了检查,那么你是否考虑过SQLite Asset Helper?如果你的主要问题是被迫使用资产文件夹,这个方法lib让你使用任何指定目录中的文件。此外,它允许处理原始.db文件。值得一试。