我正在开发一个Android
应用,我在 assets 中有一个SQLite
转储文件,我正在尝试使用该转储在用户手机中创建数据库
问题是它是一个包含sql命令的长转储文件,包括这样的换行符:
CREATE TABLE [tblType] (
[IdType] INTEGER NOT NULL ON CONFLICT ROLLBACK PRIMARY KEY ON CONFLICT ROLLBACK AUTOINCREMENT,
[Type] NVARCHAR);
所以当我尝试使用SQLiteOpenHelper
:
SQLiteOpenHelper openHelper0 = new DbHelper(this);
Cursor cu = null;
try {
cu = openHelper0.getReadableDatabase().rawQuery("select IdWord,Word from tblWord", null);
} catch (Exception e) {
e.printStackTrace();
}
我在每一行都遇到语法错误,包括换行符:
android.database.sqlite.SQLiteException:near“(”:语法错误(代码 1):,编译时:CREATE TABLE [tblType](
如果我删除第一个换行符,我会得到:
android.database.sqlite.SQLiteException:near“,”:语法错误(代码 1):,编译时:CREATE TABLE [tblType]([IdType] INTEGER NOT 在冲突回滚的冲突回滚主键上为NULL AUTOINCREMENT,
正如我所说,这是一个大型转储,我不能手动删除所有的换行符;所以问题是,是否有任何方式可以使配置或额外代码使Android
忽略换行符?
这是DBHelper
的主要代码:
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
try {
InputStream is = activity.getAssets().open("am.sql");
Scanner scanner = new Scanner(is).useDelimiter("\n");
while (scanner.hasNext()) {
sqLiteDatabase.execSQL(scanner.next());
}
is.close();
} catch (IOException ex){
}
}
答案 0 :(得分:0)
您正在逐行读取文件。这对于具有多行的SQL语句不起作用。
如果您没有包含嵌入分号的任何SQL语句(触发器或带有分号的分号的文本值),则可以在行尾使用分号来检测语句的实际结束。