尝试从资产中读取转储文件的换行符出现 SQLiteException 语法错误

SQLiteException syntax error on line breaks trying to read dump file from assets

我正在开发一个 Android 应用程序,我在 assets 中有一个 SQLite 转储文件,我正在尝试在其中创建一个数据库用户 phone 使用该转储。

问题是它是一个长转储文件,其中包含 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 "(": syntax error (code 1): , while compiling: CREATE TABLE [tblType](

如果我删除第一个换行符,我会得到:

android.database.sqlite.SQLiteException: near ",": syntax error (code 1): , while compiling: CREATE TABLE [tblType]([IdType] INTEGER NOT NULL ON CONFLICT ROLLBACK PRIMARY KEY ON CONFLICT ROLLBACK 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){

    }
}

您正在逐行阅读文件。这不适用于具有多行的 SQL 语句。

如果您没有包含嵌入分号的任何 SQL 语句(触发器,或前面有分号的文本值),您可以在行尾使用分号来检测语句的实际结尾一个换行符)。