0

我在同时插入多行时遇到问题。自上次更新android(api 19)和eclipse以来我遇到了这个问题。在此之前,下面的代码确实有效。

我试图将 api 18 设置为目标而不是 api 19,但错误是一样的。

[已编辑] 此代码适用于带有 Android 4.3 的 Nexus 4,但不适用于带有 Android 4.0.4 的设备

这是我的代码:

StopsSQLiteHelper usdbh = new StopsSQLiteHelper(this, "DBStops.db", null, 1);

SQLiteDatabase db = usdbh.getWritableDatabase();

db.execSQL("CREATE TABLE Lines(id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,name VARCHAR(150) NOT NULL)");

db.execSQL("CREATE TABLE Stops(id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,id_line INTEGER NOT NULL,name VARCHAR(150) NOT NULL,favorite VARCHAR(20), num_post VARCHAR(10),coord_lat VARCHAR(50),coord_long VARCHAR(50),FOREIGN KEY (id_linea) REFERENCES Lines(id))");

db.execSQL("CREATE TABLE Timetable(id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,id_line INTEGER NOT NULL,id_stop INTEGER NOT NULL,hour VARCHAR(5) NOT NULL,day_type VARCHAR(50) NOT NULL,FOREIGN KEY (id_line) REFERENCES Lines(id),FOREIGN KEY (id_stop) REFERENCES Stops(id))");

db.execSQL("INSERT INTO Lines (nombre) VALUES ('Stop1')");

db.execSQL("INSERT INTO Stops (id_line, name, favorite, coord_long, coord_lat) VALUES (1,'Name1','Pref1',62.625039,-8.938559)");

db.execSQL("INSERT INTO Timetable (id_line, id_stop, hour, day_type) VALUES (1,1,'00:00','workable'), (1,1,'04:55','workable')...");

db.close();

...(我插入了更多数据,但我不在这里写它以便于阅读。)

这里的错误: [编辑]

11-05 17:19:56.649: E/AndroidRuntime(10918): FATAL EXCEPTION: IntentService[MyIntentServicer]
11-05 17:19:56.649: E/AndroidRuntime(10918): android.database.sqlite.SQLiteException: near ",": syntax error: , while compiling: INSERT INTO Timetable (id_line, id_stop, hour, day_type) VALUES  (1,1,'00:00','workable'), (1,1,'04:55','workable')
11-05 17:19:56.649: E/AndroidRuntime(10918):at android.database.sqlite.SQLiteCompiledSql.native_compile(Native Method)
11-05 17:19:56.649: E/AndroidRuntime(10918): at android.database.sqlite.SQLiteCompiledSql.<init>(SQLiteCompiledSql.java:68)
11-05 17:19:56.649: E/AndroidRuntime(10918): at android.database.sqlite.SQLiteProgram.compileSql(SQLiteProgram.java:143)
11-05 17:19:56.649: E/AndroidRuntime(10918): at android.database.sqlite.SQLiteProgram.compileAndbindAllArgs(SQLiteProgram.java:361)
11-05 17:19:56.649: E/AndroidRuntime(10918): at android.database.sqlite.SQLiteStatement.acquireAndLock(SQLiteStatement.java:260)
11-05 17:19:56.649: E/AndroidRuntime(10918): at android.database.sqlite.SQLiteStatement.executeUpdateDelete(SQLiteStatement.java:84)
11-05 17:19:56.649: E/AndroidRuntime(10918): at android.database.sqlite.SQLiteDatabase.executeSql(SQLiteDatabase.java:1899)
11-05 17:19:56.649: E/AndroidRuntime(10918): at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1839)
11-05 17:19:56.649: E/AndroidRuntime(10918): at com.albertrn.example.LoadingDBIntentService.meter(LoadingDBIntentService.java:191)
11-05 17:19:56.649: E/AndroidRuntime(10918): at com.albertrn.example.LoadingDBIntentService.onHandleIntent(LoadingDBIntentService.java:32)
11-05 17:19:56.649: E/AndroidRuntime(10918): at android.app.IntentService$ServiceHandler.handleMessage(IntentService.java:65)
11-05 17:19:56.649: E/AndroidRuntime(10918): at android.os.Handler.dispatchMessage(Handler.java:99)
11-05 17:19:56.649: E/AndroidRuntime(10918): at android.os.Looper.loop(Looper.java:137)
11-05 17:19:56.649: E/AndroidRuntime(10918): at android.os.HandlerThread.run(HandlerThread.java:60)
4

1 回答 1

1

INSERT 语法对 SQLite 无效。您不能像这样插入多行:

INSERT INTO table (a, b, c) VALUES (1,2,3), (3,4,5)...

相反,它应该是多个语句一次运行一个:

INSERT INTO table (a, b, c) VALUES (1,2,3)
INSERT INTO table (a, b, c) VALUES (3,4,5)

或使用 select 和 union 的单个语句:

INSERT INTO table (a, b, c)
SELECT 1,2,3
UNION
SELECT 3,4,5
于 2013-11-05T15:36:23.033 回答