El incremento automático de SQLite no funciona

Ok esto no es spam y se supone que es simple No sé por qué no funciona este es mi código:

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

¿Qué tiene de malo esto? El registro muestra 0 para todos los registros

La clave primaria para las tablas de SQLite se llama _id. Es el incremento automático, y no deberías intentar insertar valores en él.

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

Lo que funcionó para mí fue cambiar el nombre de mi tipo de creación de INT a INTEGER y comenzó a trabajar.

De esto:

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

a esto:

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

c.getColumnIndex("ID") obtiene el índice de la columna, cuyo ID es 0 columna indexada, Name is 1 etc

usted quiere

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

Puedes ver http://alvinalexander.com/android/sqlite-autoincrement-serial-identity-primary-key Ejemplo 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); 

—O—

 INSERT INTO salespeople (first_name, last_name, commission_rate) VALUES ('Fred', 'Flinstone', 10.0); 

Porque no lo configuró en incremento automático. La clave primaria no es suficiente.

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

Desea decirle que la columna se está incrementando automáticamente.

 ID INTEGER PRIMARY KEY AUTO_INCREMENT NOT NULL 

en lugar.

  • Android: la base de datos está bloqueada
  • Estrategia para actualizar la aplicación de Android (con base de datos)
  • Android SQLite - Nueva tabla VS. Nueva base de datos
  • Usar insertWithOnConflict para actualizar o insertar
  • Cómo utilizar SQLiteDatabase.CursorFactory
  • SQLite de Android - Cursor y ContentValues
  • Preguntas SQL parametrizadas en Android
  • cláusula multiple where en android
  • Cursor finalizado sin cerrar antes () en ListFragment
  • Populating Spinner de la base de datos SQLite Android
  • Android SQLiteOpenHelper - clase diferente para cada tabla?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.