2014-11-02 77 views
1

我在Android上的SQLite數據庫中有一個表,它只包含一個具有行ID的列。該表格用於鏈接不同表格中的數據集。當我嘗試在表中插入新行就拋出此異常:如何使用ID列在SQLite表中創建一個新行?

android.database.sqlite.SQLiteException:近「零」:語法錯誤 (代碼1):在編譯:INSERT INTO journeyDetailsTable (空) VALUES(NULL)

我的表是這樣創建的:

private static final String CREATE_TABLE_JOURNEY_DETAIL = "create table " + 
     TABLE_NAME + " (" + ID_COLUMN + " integer primary key autoincrement);"; 

,我試圖插入新行是這樣的:

parentID = db.insert(ANOTHER_TABLE, null, new ContentValues()); 

任何想法?

+0

如果你想鏈接表,你應該有** 2 id列**。要鏈接表A和表B(例如),您應該擁有包含id_A和id_B的表C. – 2014-11-02 14:08:49

+0

現在我的設置是這樣的:表A是主表,它通過行ID將它們連接在一起。其他3個表具有主表的行ID的外鍵。它們在主表格和其他表格之間都有一對多的關係。這意味着主表的一個行ID可以引用其他表中的許多行。 – Sulby 2014-11-02 14:10:19

+0

那麼,表A **是否真的需要**?我認爲你可以擺脫它。 – 2014-11-02 14:12:28

回答

2

SQLiteDatabase.insert(String, String, ContentValues)的文檔明確聲明SQL不允許在未命名至少一個列名的情況下插入完全空行。這意味着如果不指定任何值,則需要指定要在其中插入NULL的列名。你應該可以用db.insert(ANOTHER_TABLE, ID_COLUMN, new ContentValues())來完成。無論如何,你應該重新考慮你的數據庫結構,像這樣設置表似乎不是有效,可維護和可監控的,尤其是在長期運行中。

1

只是通過ID_COLUMN作爲列名在INSERT,空不是列,但傳遞null到ID會讓ID是自動遞增:

INSERT INTO journeyDetailsTable(ID_COLUMN) VALUES (NULL) 

demo

相關問題