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
- Java.lang.StackOverflowError
- Sincronización entre la base de datos SQL Lite en un dispositivo android y la base de datos de SQL Server
- Insertar datos JSON en la base de datos SQLite en android
- Consultando y trabajando con Cursores en SQLite en Android
- Obtención de todos los registros de sqlite android
- Android Store un objeto parcelable en SQLite
- Cómo obtener el registro de llamadas desde fecha específica en android
- Sqlite sincrónico
- IntelliJ Permiso de SQLite denegado en Android Lollipop, trabajado antes
- SQLIte DROP tabla ROLL volver
- Seleccione un valor distinto en android sqlite
- Orden de índices de columna SQLite crea tabla
- ¿Cómo crear una vista sql (CREATE VIEW) en sqlite (android) y consulta?
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.