Tengo un problema a la hora de hacer INSERT en una tabla, y es que la columna id siempre es 0 y no se autoincrementa. Uso SQLite.
Cita:
package com.example.jessi.moopooh;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import java.util.ArrayList;
import java.util.List;
/**
* Created by jessi on 17/06/2016.
*/
public class BDJuego extends SQLiteOpenHelper {
private static final String NOMBRE_BD = "bdmoopooh.db";
private static final int VERSION_BD = 1;
private static final String TABLA_PUNTUACIONES = "CREATE TABLE puntuaciones" +
"(_id INTEGER PRIMARY KEY AUTOINCREMENT, nombre_juego TEXT NOT NULL, nombre_nivel TEXT NOT NULL, puntos INTEGER NOT NULL, UNIQUE(nombre_nivel))";
public BDJuego(Context context) {
super(context, NOMBRE_BD, null, VERSION_BD);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(TABLA_PUNTUACIONES);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS " + TABLA_PUNTUACIONES);
onCreate(db);
}
public void insertarPuntuaciones(String nombre_juego, String nombre_nivel, int puntos) {
SQLiteDatabase db = getWritableDatabase();
if (db != null) {
ContentValues valores = new ContentValues(); //como su nombre indica es un almacenador de un conjunto de datos
//valores.put("_id", id);
valores.put("nombre_juego", nombre_juego);
valores.put("nombre_nivel", nombre_nivel);
valores.put("puntos", puntos);
db.insert("puntuaciones", null, valores);
db.close();
}
}
//Este método no sé si lo usaré
public void modificarPuntuaciones(int id, String nombre_juego, String nombre_nivel, int puntos) {
SQLiteDatabase db = getWritableDatabase();
ContentValues valores = new ContentValues();
// valores.put("_id", id);
valores.put("nombre_juego", nombre_juego);
valores.put("nombre_nivel", nombre_nivel);
valores.put("puntos", puntos);
db.update("puntuaciones", valores, "_id=" + id, null);
db.close();
}
//Este método no sé si lo usaré
public void borrarPuntuaciones(int id) {
SQLiteDatabase db = getWritableDatabase();
db.delete("puntuaciones", "_id=" + id, null);
db.close();
}
//Recuperar solo una puntuacion. No sé si lo usaré
public Puntuaciones recuperarPuntuacion(int id) {
SQLiteDatabase db = getReadableDatabase();
String[] valores_recuperar = {"_id", "nombre_juego", "nombre_nivel", "puntos"};
Cursor c = db.query("contactos", valores_recuperar, "_id=" + id,
null, null, null, null, null); // El método query nos devolverá un Cursor que podremos recorrer para recuperar todos los registros de la base de datos
if (c != null) {
c.moveToFirst();
}
Puntuaciones puntuaciones = new Puntuaciones(c.getString(1),
c.getString(2), c.getInt(3));
db.close();
c.close();
return puntuaciones;
}
//Recuperar todas las puntuaciones
public List<Puntuaciones> recuperarTodasLasPuntuaciones() {
SQLiteDatabase db = getReadableDatabase();
List<Puntuaciones> lista_puntuaciones = new ArrayList<Puntuaciones>();
String[] valores_recuperar = {"_id", "nombre_juego", "nombre_nivel", "puntos"};
Cursor c = db.query("puntuaciones", valores_recuperar,
null, null, null, null, null, null);
c.moveToFirst();
do {
Puntuaciones puntuaciones = new Puntuaciones(c.getString(1),
c.getString(2), c.getInt(3));
lista_puntuaciones.add(puntuaciones);
} while (c.moveToNext());
db.close();
c.close();
return lista_puntuaciones;
}
}
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import java.util.ArrayList;
import java.util.List;
/**
* Created by jessi on 17/06/2016.
*/
public class BDJuego extends SQLiteOpenHelper {
private static final String NOMBRE_BD = "bdmoopooh.db";
private static final int VERSION_BD = 1;
private static final String TABLA_PUNTUACIONES = "CREATE TABLE puntuaciones" +
"(_id INTEGER PRIMARY KEY AUTOINCREMENT, nombre_juego TEXT NOT NULL, nombre_nivel TEXT NOT NULL, puntos INTEGER NOT NULL, UNIQUE(nombre_nivel))";
public BDJuego(Context context) {
super(context, NOMBRE_BD, null, VERSION_BD);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(TABLA_PUNTUACIONES);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS " + TABLA_PUNTUACIONES);
onCreate(db);
}
public void insertarPuntuaciones(String nombre_juego, String nombre_nivel, int puntos) {
SQLiteDatabase db = getWritableDatabase();
if (db != null) {
ContentValues valores = new ContentValues(); //como su nombre indica es un almacenador de un conjunto de datos
//valores.put("_id", id);
valores.put("nombre_juego", nombre_juego);
valores.put("nombre_nivel", nombre_nivel);
valores.put("puntos", puntos);
db.insert("puntuaciones", null, valores);
db.close();
}
}
//Este método no sé si lo usaré
public void modificarPuntuaciones(int id, String nombre_juego, String nombre_nivel, int puntos) {
SQLiteDatabase db = getWritableDatabase();
ContentValues valores = new ContentValues();
// valores.put("_id", id);
valores.put("nombre_juego", nombre_juego);
valores.put("nombre_nivel", nombre_nivel);
valores.put("puntos", puntos);
db.update("puntuaciones", valores, "_id=" + id, null);
db.close();
}
//Este método no sé si lo usaré
public void borrarPuntuaciones(int id) {
SQLiteDatabase db = getWritableDatabase();
db.delete("puntuaciones", "_id=" + id, null);
db.close();
}
//Recuperar solo una puntuacion. No sé si lo usaré
public Puntuaciones recuperarPuntuacion(int id) {
SQLiteDatabase db = getReadableDatabase();
String[] valores_recuperar = {"_id", "nombre_juego", "nombre_nivel", "puntos"};
Cursor c = db.query("contactos", valores_recuperar, "_id=" + id,
null, null, null, null, null); // El método query nos devolverá un Cursor que podremos recorrer para recuperar todos los registros de la base de datos
if (c != null) {
c.moveToFirst();
}
Puntuaciones puntuaciones = new Puntuaciones(c.getString(1),
c.getString(2), c.getInt(3));
db.close();
c.close();
return puntuaciones;
}
//Recuperar todas las puntuaciones
public List<Puntuaciones> recuperarTodasLasPuntuaciones() {
SQLiteDatabase db = getReadableDatabase();
List<Puntuaciones> lista_puntuaciones = new ArrayList<Puntuaciones>();
String[] valores_recuperar = {"_id", "nombre_juego", "nombre_nivel", "puntos"};
Cursor c = db.query("puntuaciones", valores_recuperar,
null, null, null, null, null, null);
c.moveToFirst();
do {
Puntuaciones puntuaciones = new Puntuaciones(c.getString(1),
c.getString(2), c.getInt(3));
lista_puntuaciones.add(puntuaciones);
} while (c.moveToNext());
db.close();
c.close();
return lista_puntuaciones;
}
}
Hago el insert en otra clase:
Cita:
Y al consultar todas las inserciones me sale lo siguiente en el logcat:bdjuego.insertarPuntuaciones(nombre_juego_recupera do, nombre_nivel_recuperado, puntuacion_recuperada);
https://gyazo.com/18cd89ac69b41db86a63abac0a93712e