2013-05-30 37 views
9

确定这是不是垃圾邮件,它应该是简单的,我不知道为什么它不工作 这是我的代码:SQLite的自动递增不工作

gamesdatabase = openOrCreateDatabase("GamesDatabase", MODE_PRIVATE, null); 
gamesdatabase.execSQL("CREATE TABLE IF NOT EXISTS Games (ID INTEGER PRIMARY KEY, Name 
VARACHAR, NPlayers INT(1), NRounds INT(2), WinScore INT(2));"); 

gamesdatabase.execSQL("INSERT INTO Games 
(ID, Name, NPlayers, NRounds, WinScore) VALUES (NULL, 'TAWLA',2,0,0);"); 

gamesdatabase.execSQL("INSERT INTO Games 
(ID, Name, NPlayers, NRounds, WinScore) VALUES (NULL, 'DOMANA',4,0,0);"); 


Cursor c = gamesdatabase.rawQuery("SELECT * FROM Games", null); 
c.moveToFirst(); 
while (c.isAfterLast() == false) { 
Log.d("BEZRA", String.valueOf(c.getInt(c.getColumnIndex("ID")))); 
c.moveToNext(); 
} 

有什么错呢?日志显示0为所有记录

+1

自动增量工作。你只需要实际使用它。 – njzk2

+0

你循环游标值的方式太复杂了。看看http://stackoverflow.com/questions/10723770/whats-the-best-way-to-iterate-an-android-cursor –

回答

25

SQLite表的主键称为_id。它是自动递增的,你不应该试图向它插入值。

gamesdatabase = openOrCreateDatabase("GamesDatabase", MODE_PRIVATE, null); 
gamesdatabase.execSQL("CREATE TABLE IF NOT EXISTS Games (_id INTEGER PRIMARY KEY, Name 
VARACHAR, NPlayers INT(1), NRounds INT(2), WinScore INT(2));"); 

gamesdatabase.execSQL("INSERT INTO Games 
(Name, NPlayers, NRounds, WinScore) VALUES ('TAWLA',2,0,0);"); 

gamesdatabase.execSQL("INSERT INTO Games 
(Name, NPlayers, NRounds, WinScore) VALUES ('DOMANA',4,0,0);"); 


Cursor c = gamesdatabase.rawQuery("SELECT * FROM Games", null); 
c.moveToFirst(); 
while (c.isAfterLast() == false) { 
Log.d("BEZRA", String.valueOf(c.getInt(c.getColumnIndex("_id")))); 
c.moveToNext(); 
} 
+0

让我试试这听起来很有希望 – BezrA

+0

谢谢你这样做的伎俩。最受赞赏。 – BezrA

+0

我想投票,但我的声望小于15,但这是答案 – BezrA

0

因为您没有将其设置为自动增量。主键是不够的。

CREATE TABLE IF NOT EXISTS Games (ID INTEGER PRIMARY KEY AUTOINCREMENT, Name VARACHAR, NPlayers INT(1), NRounds INT(2), WinScore INT(2)); 
+0

我没有设置AUTOINCREMENT,并没有工作,然后我读的主键是绰绰有余 – BezrA

+0

我写的不够。您需要主键和自动增量。 – Gustek

+2

@Gustek,根据sqlite http://sqlite.org/autoinc.html文档,sqlite假定自动增量用于指定主键为 –

0

你想告诉它该列是自动递增的。

ID INTEGER PRIMARY KEY AUTO_INCREMENT NOT NULL 

改为。

+0

它没有工作,但无论如何感谢,诀窍是将ID重命名为_id,当您使用整数主键时,AUTOINCREMENT是没有必要的 – BezrA

2

c.getColumnIndex("ID") 获取列,其中ID为0索引列的索引,名称为1等

你想

c.getInt(c.getColumnIndex("ID"))

+0

这就像在代码中它是我的错,当它复制,它不工作谢谢 – BezrA

+0

这回答了我与我的代码有问题。谢谢! – Greener

6

什么工作对我来说是我的重命名从INT创建类型为INTEGER,然后它开始工作。

从这:

CREATE TABLE IF NOT EXISTS foo (id INT PRIMARY KEY, bar INT) 

这样:

CREATE TABLE IF NOT EXISTS foo (id INTEGER PRIMARY KEY, bar INT)