Android SQLite: insertar y actualizar sin consultas

Muchas veces cuando estamos insertando datos en nuestra base de datos lo hacemos de forma masiva y no nos preocupa obtener el identificador de cada fila. Pero otras veces es necesario acceder, por ejemplo porque estamos registrando un determinado item y necesitamos su id para asociarlo a otro. Hacer esto se puede hacer de una forma muy sencilla, veámoslo.


Antes de nada vamos a hacer memoria y recordaremos la clase que creamos para manejar la base de datos en este artículo http://www.nosinmiubuntu.com/2011/11/como-guardar-datos-en-android-bases-de.html. Aquí teníamos un método llamado insertarUsuario que hoy haremos de una forma un poco diferente.

Empezamos cambiando un poco la consulta para crear la tabla de los usuarios. la diferencia con la anterior es que ahora id_usuario es de tipo INTEGER no INT, es PRIMARY KEY, es decir es clave primaria y por lo tanto debe ser un dato único, y por último es AUTOINCREMENT, con esto no hará falta que al insertar indiquemos el id_usuario, se irá generando uno automáticamente, primero insertará 1, luego 2, y así sucesivamente.


private String SQLCreateUsuarios = "CREATE TABLE " + TableUsuarios +  " (id_usuario INTEGER PRIMARY KEY AUTOINCREMENT, nombre VARCHAR(1000), email VARCHAR(1000) ) ";


Ahora que ya tenemos modificada nuestra tabla vamos a ver el nuevo método insertarUsuario.


public int insertarUsuario(String nombre, String email){
 int idUsuario = 0;
 SQLiteDatabase db = getWritableDatabase();
 if(db!=null){
  ContentValues values = new ContentValues();
  values.put("nombre", nombre);
  values.put("email", email);
  idUsuario = (int) db.insert(TableUsuarios, null, values);  
 }
db.close();   
return idUsuario;
}


Como veis dejamos de crear nosotros la consulta con el insert y simplemente en un objeto ContentValues añadimos los parámetros que queremos insertar para luego llamar al método insert de db diciéndole en que tabla insertamos y los values que insertamos, el método se encarga de obtener y devolver el identificador de usuario obtenido. Este está devolviendo  un long, pero nosotros le hacemos un cast a int.

Para completar el artículo vamos a ver como actualizar este usuario. Vamos a seguir con nuestro objeto ContentValues, pero ahora utilizamos el método update. A este debemos pasarle el nombre de la tabla y los values como en el anterior método. Además le pasamos la clausula where en nuestro caso los que tengan un determinado id_usuario, y con el siguiente parámetro que es un array de String le decimos que id_usuario debe poner donde esta el interrogante (?).


public int actualizarUsuario(int idUsuario, String nombre, String email){
 int filasAfectadas = 0;
 SQLiteDatabase db = getWritableDatabase();
 if(db!=null){
  ContentValues values = new ContentValues();
  values.put("nombre", nombre);
  values.put("email", email);
  filasAfectadas = (int) db.update(TableUsuarios, values, "id_usuario = ?", new String[]{String.valueOf(idUsuario)});  
 }
db.close();   
return filasAfectadas;
}


Al final obtendremos el número de filas afectadas por la actualización.

Comments are closed.