【发布时间】:2011-09-19 23:25:43
【问题描述】:
我有一个包含 SQL CREATE TABLE 和 INSERT 语句的大文本文件。如何在SQLiteOpenHelperonCreate方法中导入这个文件?
或者,是否有直接使用二进制数据库文件的可接受方式?
我需要它与 Android 1.6 兼容。
【问题讨论】:
我有一个包含 SQL CREATE TABLE 和 INSERT 语句的大文本文件。如何在SQLiteOpenHelperonCreate方法中导入这个文件?
或者,是否有直接使用二进制数据库文件的可接受方式?
我需要它与 Android 1.6 兼容。
【问题讨论】:
我必须解决同样的问题。找不到直接的方法,所以我将文件放入 res/raw 目录并使用 openRawResource 获取 InputStream 。然后我读了几行,直到一行以; 结尾。然后我将语句传递给 sqlite 数据库。
希望其他人提出更好的方法,但我想我会添加我最终这样做的方式。
【讨论】:
按照史蒂夫·普伦蒂斯的回答。这是我的实现:
res/raw 中的 mydb.sql 文件
CREATE TABLE table1(col1 INTEGER PRIMARY KEY, col2 TEXT);
CREATE TABLE table2(col1 INTEGER PRIMARY KEY, col2 TEXT, col3 INTEGER);
MyClass.java
InputStream inputStream = context.getResources().openRawResource(R.raw.mydb);
String queries = "";
try {
queries = IOUtils.toString(inputStream);
} catch (IOException e) {
Util.logException(e);
}
for (String query : queries.split(";")) {
db.execSQL(query);
}
【讨论】:
在 SQLiteOpenHelper onCreate() 方法中,您可以只使用db.execSQL(...),但这取决于您的“文本文件”的结构(以及文件的大小)。
或者,您可以在您的应用中“发布”一个 SQLite 数据库 - 请参阅此链接以提供一些想法...
【讨论】:
/data/data/YOUR_PACKAGE/databases/ 路径,而无需对其进行硬编码?
getDatabasePath(...)
导入您自己的 sqlite db 文件的问题在于,您必须确保创建文件的引擎版本与正在安装 db 的 Android 设备上的引擎版本相匹配。通过运行 SQL 脚本文件,您可以确保使用实际安装在 Android 设备上的引擎创建数据库。
【讨论】: