2013-05-30 4 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 предполагает автоинкремент для поля, указанного с помощью PRIMARY KEY –

0

Вы хотите сказать, что столбец автоматически увеличивается.

ID INTEGER PRIMARY KEY AUTO_INCREMENT NOT NULL 

вместо этого.

+0

это не сработало, но в любом случае спасибо, трюк заключался в переименовании идентификатора в _id, AUTOINCREMENT не требуется, когда вы используете целочисленный первичный ключ – BezrA

2

c.getColumnIndex("ID") получает индекс столбца, который идентификатор 0 индексированный столбец, название является 1 и т.д.

вы хотите

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

+0

это похоже на то, что в коде это было моей ошибкой при копировании, и это не работает. Спасибо – BezrA

+0

Это ответ на проблему, с которой я столкнулся с моим кодом. Благодаря! – Greener

1

Вы можете увидеть http://alvinalexander.com/android/sqlite-autoincrement-serial-identity-primary-key Пример CRETAE_TABLE

CREATE TABLE salespeople (
    id INTEGER PRIMARY KEY, 
    first_name TEXT NOT NULL, 
    last_name TEXT NOT NULL, 
    commission_rate REAL NOT NULL 
); 

INSERT_DATA

INSERT INTO salespeople VALUES (null, 'Fred', 'Flinstone', 10.0); 

--- ИЛИ ---

INSERT INTO salespeople (first_name, last_name, commission_rate) VALUES ('Fred', 'Flinstone', 10.0); 
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) 
Смежные вопросы