尝试从资产中读取转储文件的换行符出现 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 语句(触发器,或前面有分号的文本值),您可以在行尾使用分号来检测语句的实际结尾一个换行符)。
我正在开发一个 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 语句(触发器,或前面有分号的文本值),您可以在行尾使用分号来检测语句的实际结尾一个换行符)。