CLASE 05
SQLite
¿Qué es SQLite?
SQLite es un Sistema de Gestion de Bases de Datos Relacionales. Soporta las características estándares como la Sintaxis SQL.
Requiere muy poca memoria para su ejecución (~275KB) y es de código libre, al igual que lo es Android, y por estas razones es que se eligió para ser el motor de bases de datos que viene integrado en TODOS los dispositivos Android.
Tipos de Datos Soportados
La base de datos SQLite sólo soporta datos de tipo:
- Entero
- Real
- Texto
Cualquier otro tipo de datos que se quiera guardar debe ser convertido a uno de los anteriores antes de guardarlo. SQLite no realiza verificación alguna sobre el tipo de datos a almacenar, por lo cual es reponsabilidad
del desarrollador hacerlo correctamente.
APLICACION USANDO SQLite
Gestion de Biblioteca
Necesitamos
1- Base de Datos para almacenar los Libros
2- Modelo para representar a los Libros
3- Actividad para crear un nuevo Libro
4- Actividad donde ver Listado
5- Se debe poder realizar ABM sobre la Base de Datos
1- Base de Datos
La clase SQLiteOpenHelper nos permite crear y actualizar una BD. En el constructor de la misma se debe llamar al método super(), especificando el nombre de la base y la versión de la base de datos actual.
public LibrosDataBase(Context c) {
super(c, myDATABASE_name, null, myDATA_BASE_ver);
}
El parámetro que se pasa como NULL es el CursorFactory que no lo vamos a usar
1- Base de Datos
Al extender de SQLiteOpenHelper Deberemos redefinir los métodos onCreate () y onUpgrade ().
- onCreate() es llamado por Android, si la base de datos no existe.
- onUpgrade() permite actualizar el esquema de base de datos.
@Override
public void onCreate(SQLiteDatabase db) {
String sql = "CREATE TABLE " + LIBROS_TABLA + " (" +
COL_ID + " TEXT primary key, " +
COL_TITULO + " TEXT, " +
COL_DESCRIPCION + " TEXT);";
db.execSQL(sql);
}
2- Modelo de Libro
Esta clase nos va a representar a un Libro. En ella definimos los atributos que va a tener un Libro, y su constructor.
Además, vamos a hacer un Override del metodo toString() para que al invocarlo, nos devuelva el titulo del libro
3- Creacion de Libro
En la actividad para crear un Libro, vamos a tener 3 EditText, uno para el ID, otro para el Titulo y otro para la Descripción.
Vamos a poner los botones de Acción en la ActionBar para guardar y cancelar.
Lo primero que tenemos que hacer es obtener una conexión a la BD (la cual se debe cerrar en el onDestroy())
Vamos a tener un método al que llamaremos modificarBaseDeDatos el cual se va a encargar de crear el Libro en la Base.
3- Creacion de Libro
long modificarBaseDeDatos() {
SQLiteDatabase db = libros.getWritableDatabase();
String id = editID.getText().toString();
String titulo = editTitulo.getText().toString();
String descrip = editDescripcion.getText().toString();
ContentValues cv = new ContentValues();
cv.put(LibrosDataBase.COL_ID, id);
cv.put(LibrosDataBase.COL_TITULO, titulo);
cv.put(LibrosDataBase.COL_DESCRIPCION, descrip);
return db.insert(LibrosDataBase.LIBROS_TABLA, null, cv);
}
El valor devuelto por el insert es el ID de la fila (registro) creado en caso satisfactorio; o -1 en caso de error
4- Listado de Libros
Vamos a usar un ListView. Es un componente de Android que nos permite manejar las LISTAS de una manera muy sencilla.
public void mostrarListaLibros(){
ListaLibros = getLibros();
ArrayAdapter<Libro> adapter = new ArrayAdapter<Libro>(this,
android.R.layout.simple_list_item_1, ListaLibros);
ListView listview = (ListView) findViewById(R.id.listview);
listview.setAdapter(adapter);
}
4- Listado de Libros
public List<Libro> getLibros() {
List<Libro> listaLibros = new ArrayList<Libro>();
SQLiteDatabase db = libros.getReadableDatabase();
String columnas[] = {
LibrosDataBase.COL_ID,
LibrosDataBase.COL_TITULO,
LibrosDataBase.COL_DESCRIPCION};
Cursor cursor = db.query(
LibrosDataBase.LIBROS_TABLA,
columnas,
null, null, null, null, null);
cursor.moveToFirst();
while (!cursor.isAfterLast()) {
Libro l = new Libro(cursor.getString(0),
cursor.getString(1), cursor.getString(2));
listaLibros.add(l);
cursor.moveToNext();
}
cursor.close();
return listaLibros;
}
5- ABM
Nos vamos a valer de un menu contextual para hacerlo
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu_contextual, menu);
// Es muy importante que cuando se cree el menu contextual, guardemos
// la posicion en la lista en la que desplegamos el menu, para luego
// poder obtener los datos de ESE libro
AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo)menuInfo;
posicionItem = info.position;
}
5- ABM
Al Borrar, eliminamos de la base de datos
public long borrarLibro (int pos){
SQLiteDatabase db = libros.getWritableDatabase();
String id = ListaLibros.get(pos).id;
return (db.delete(LibrosDataBase.LIBROS_TABLA, LibrosDataBase.COL_ID
+ " = " + id, null));
}
Para editar, vamos a usar la misma actividad que usamos para crear uno nuevo. Pero le vamos a pasar EXTRAS en su intento.
5- ABM
Ademas, no se debe poder modificar el ID ya que es lo vamos a usar para identificarla en la BD.
Y en lugar de un INSERT vamos a hacer un UPDATE
return db.update(LibrosDataBase.LIBROS_TABLA, cv,
LibrosDataBase.COL_ID+"=?", new String[]{id});
Gracias!
No dejen de consultar cualquier duda que surja
sebasira@gmail.com
Android - Clase 05
By Ing. Sebastian M. Irazabal
Android - Clase 05
- 499