我正在尝试从文件读取并执行 SQL 脚本。 CREATE 命令可以工作,但我的第一个 INSERT 命令会导致 Logcat 错误,其中包含标签“SQLiteLog”和文本“(1) 靠近“INSERT”:语法错误”。错误在database.execSQL()行上抛出。
String[] createScript = outputStream.toString().split(";");
for (int i = 0; i < createScript.length; i++) {
String sqlStatement = createScript[i].trim();
// TODO You may want to parse out comments here
if (sqlStatement.length() > 0) {
database.execSQL(sqlStatement + ";");
}
}
SQL行如下
INSERT INTO [EntityAttributeSet] ([Id],[Code]) VALUES (1,NULL);
CREATE语句如下
CREATE TABLE [EntityAttributeSet] ([Id] int IDENTITY (636,1) NOT NULL, [Code]nvarchar(50) NULL);
一些 INSERT 语句的十六进制转储:
0000-0c00: 20 4e 4f 54-20 4e 55 4c-4c 0d 0a 29-3b 0d 0a 49 .NOT.NUL L..);..I
0000-0c10: 4e 53 45 52-54 20 49 4e-54 4f 20 5b-45 6e 74 69 NSERT.IN TO.[Enti
0000-0c20: 74 79 41 74-74 72 69 62-75 74 65 53-65 74 5d 20 tyAttrib uteSet].
0000-0c30: 28 5b 49 64-5d 2c 5b 43-6f 64 65 5d-29 20 56 41 ([Id],[C ode]).VA
0000-0c40: 4c 55 45 53-20 28 31 2c-4e 55 4c 4c-29 3b 0d 0a LUES.(1, NULL);..
0000-0c50: 0d 0a 49 4e-53 45 52 54-20 49 4e 54-4f 20 5b 45 ..INSERT .INTO.[E
0000-0c60: 6e 74 69 74-79 41 74 74-72 69 62 75-74 65 53 65 ntityAtt ributeSe
0000-0c70: 74 5d 20 28-5b 49 64 5d-2c 5b 43 6f-64 65 5d 29 t].([Id] ,[Code])
0000-0c80: 20 56 41 4c-55 45 53 20-28 32 2c 4e-55 4c 4c 29 .VALUES. (2,NULL)
0000-0c90: 3b 0d 0a 0d-0a 49 4e 53-45 52 54 20-49 4e 54 4f ;....INS ERT.INTO
我自己解决了这个问题——脚本后面有一个来自不同风格的 SQL 的命令。删除它修复了错误。
如果您的第一个参数确实是整数,请执行以下操作:
INSERT INTO EntityAttributeSet (Id,Code) VALUES (1,NULL)
如果它是 varchar(字符串),请执行以下操作:
INSERT INTO EntityAttributeSet (Id,Code) VALUES ("1",NULL)