“INSERT”附近的 SQLiteLog 错误(1):语法错误

问题描述 投票:0回答:2

我正在尝试从文件读取并执行 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
java android sql sqlite
2个回答
1
投票

我自己解决了这个问题——脚本后面有一个来自不同风格的 SQL 的命令。删除它修复了错误。


-2
投票

如果您的第一个参数确实是整数,请执行以下操作:

  INSERT INTO EntityAttributeSet (Id,Code) VALUES (1,NULL)

如果它是 varchar(字符串),请执行以下操作:

  INSERT INTO EntityAttributeSet (Id,Code) VALUES ("1",NULL)

更多信息:http://www.w3schools.com/sql/sql_insert.asp

© www.soinside.com 2019 - 2024. All rights reserved.