2017-04-09 69 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 

简而言之:自动增量仅适用于整数主键。