2017-04-09 21 views
0

我有一個數據庫設置來存儲筆記。我想自動增加第一列。我試過這個,但是當我從數據庫讀取時,該列中的每個結果都是'null'。

這是創建數據庫的代碼。爲什麼sqlite auto_increment不遞增?

private static final String NOTES_TABLE_CREATE = 
     "CREATE TABLE " + NOTES_TABLE_NAME + " (" + 
       COLUMN_NAMES[0] + " INTEGER AUTO_INCREMENT, " + 
       COLUMN_NAMES[1] + " TEXT, " + 
       COLUMN_NAMES[2] + " TEXT, " + 
       COLUMN_NAMES[3] + " TEXT, " + 
       COLUMN_NAMES[4] + " TEXT, " + 
       COLUMN_NAMES[5] + " TEXT, " + 
       COLUMN_NAMES[6] + " TEXT);"; 


這是獲取數據庫結果的代碼。

SQLiteDatabase db = this.getReadableDatabase(); 

    Cursor result = db.query(NOTES_TABLE_NAME, COLUMN_NAMES, null, null, null, null, null, null); 

    result.moveToFirst(); 
    result.moveToNext(); 

    System.out.println(result.getInt(0)); 
    System.out.println(result.getString(1)); 


這是從logcat的

04-09 17:56:17.981 22147-22147/com.example.a8460p.locationotes I/System.out: 0 
04-09 17:56:17.981 22147-22147/com.example.a8460p.locationotes I/System.out: notetitle1234567890 
+0

表中是否包含任何數據? –

+0

是的,第二個System.out.println輸出notetitle1234567890。我也可以添加數據並用數據填充列表。這只是auto_increment列,似乎沒有記錄任何東西 – Gus

+1

因爲你沒有將它應用到'INTEGER PRIMARY KEY'列。 – PetSerAl

回答

0

AUTO_INCREMENT輸出(相對於INTEGER PRIMARY KEY AUTOINCREMENT)SQLite中不被支持。

這是一個小非明顯,因爲sqlite的自動忽略列約束它不承認:

sqlite> CREATE TABLE test (
    a INTEGER FABBELBABBEL NOT NULL 
); 
sqlite> .schema test 
CREATE TABLE test (a INTEGER FABBELBABBEL NOT NULL); 
sqlite> INSERT INTO test (a) VALUES (1); 
sqlite> INSERT INTO test (a) VALUES (NULL); 
Error: NOT NULL constraint failed: test.a 

AUTOINCREMENT在另一方面,支持整數主鍵,只有在那裏,所以明顯的解決方法嘗試不支持:

sqlite> CREATE TABLE test (a INTEGER AUTOINCREMENT NOT NULL, b INTEGER); 
Error: near "AUTOINCREMENT": syntax error 

簡而言之:自動增量僅適用於整數主鍵。