2013-05-30 12 views
9

ok questo non è spamming e si suppone che sia semplice non so il motivo per cui non funziona questo è il mio codice:incremento automatico SQLite non funziona

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(); 
} 

cosa c'è di sbagliato in questo? il registro visualizza 0 per tutti i record

+1

autoincrement funziona. devi solo usarlo veramente. – njzk2

+0

Il modo in cui si scorre i valori del cursore è troppo complicato. Guarda http://stackoverflow.com/questions/10723770/whats-the-best-way-to-iterate-an-android-cursor –

risposta

25

La chiave primaria per le tabelle SQLite è denominata _id. Si tratta di un incremento automatico e non dovresti provare a inserire valori in esso.

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

fammi provare questo suono promettente – BezrA

+0

grazie a questo fatto il trucco. più apprezzato – BezrA

+0

Mi piacerebbe votare, ma la mia reputazione è inferiore a 15 ma questa è la risposta – BezrA

0

Perché non è stato impostato su incremento automatico. La chiave primaria non è sufficiente.

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

Ho impostato l'AUTOINCREMENT e non ha funzionato e poi ho letto che la chiave primaria è più che sufficiente – BezrA

+0

Ho scritto NON abbastanza. Hai bisogno sia della chiave primaria che dell'aumento automatico. – Gustek

+2

@Gustek, sqlite assume l'autoincremento per un campo specificato con PRIMARY KEY –

0

Si vuole dire che la colonna è autoincremento.

ID INTEGER PRIMARY KEY AUTO_INCREMENT NOT NULL 

invece.

+0

non ha funzionato, ma grazie comunque, il trucco è stato rinominare ID in _id, AUTOINCREMENT non è necessario quando si utilizza la chiave primaria intera – BezrA

2

c.getColumnIndex("ID") ha l'indice della colonna, che ID è 0 colonna indicizzata, nome è 1 etc

desideri

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

+0

è come se nel codice fosse colpa mia quando lo copiavo e non funziona grazie – BezrA

+0

Questo ha risposto a un problema che stavo facendo con il mio codice. Grazie! – Greener

6

Che cosa ha funzionato per me era il mio tipo di ridenominazione creare da INT a intero ed ha iniziato a lavorare.

Da questo:

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

a questo:

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