domingo, 30 de marzo de 2014

Android: Base de Datos interna SQLite


A la hora de montar una BD interna en Android utilizamos SQLite

A su vez, podemos llevar a cabo la programación de nuestra BD utilizando diferentes paradigmas; pero yo prefiero usar el paradigma de Orientación a Objetos que es más sencillo y más fácil de entender (para mí).


La Base de Datos solo nos ocupará un fichero java, así que todas las operaciones de recuperación, inserción, borrado y actualización sobre las tablas de nuestra BD las podremos hacer en el mismo fichero.

Como siempre, os mostraré cómo se hace mediante un pequeño ejemplo: haremos una pequeña base de datos para libros. Los libros deberán tener un id, nombre, fecha de edición y nombre del autor.

1. Creación de la BD y de las Tablas


public class BDSQLite_Library extends SQLiteOpenHelper
{
// Nombre de la tabla
private String tabla_libros = "books";


// Creamos la Base de Datos con un nombre
public BDSQLite(Context context, String nombre)
{
super(context, nombre, null, 1);
}


// Este método se ejecuta solo una vez al instalarse la aplicación 
        // y creará las tablas de la BD
@Override
public void onCreate(SQLiteDatabase db) 
{
db.execSQL("CREATE TABLE "+ tabla_libros +" ("+
                "_id INTEGER PRIMARY KEY AUTOINCREMENT, "+
                "nombre TEXT, fecha_edicion TEXT, nombre_autor TEXT)");
}
}

NOTA: si modificamos la estructura de alguna tabla de la Base de Datos tendremos que des-instalar y volver a instalar la app.


2. Añadir y Borrar

2.1 Añadir: INSERT INTO


public void addBook (String bookName, String dateEdition, String authorName)
{
SQLiteDatabase db = getWritableDatabase();
db.execSQL("INSERT INTO "+ tabla_libros +" VALUES ( null, '"+ bookName 
+"', '"+ dateEdition + "', '"+ authorName +"')");
                db.close();
}

2.2 Borrar: DELETE FROM


public void removeBook (int id)
{
SQLiteDatabase db = getWritableDatabase();
db.execSQL("DELETE FROM "+ tabla_libros +" WHERE _id="+ 
                                         Integer.toString(id) );
                db.close();
}

Aquí podemos complicarnos todo lo que queramos a la hora de borrar un libro en concreto. Por ejemplo, podemos elegir utilizar el nombre del libro en vez del ID; o ambos campos.

3. Recuperación de Información: SELECT

3.1 Devolvemos un libro


public HashMap<String,String> getBook (int id) 
{
HashMap<String,String> libro = new HashMap<String,String>();
SQLiteDatabase db = getReadableDatabase();
String consulta = "SELECT * FROM "+ tabla_libros + 
                                               " WHERE _id="+ Integer.toString(id);
Cursor cursor = db.rawQuery(consulta, null);
while (cursor.moveToNext())
{
libro.put("Id", cursor.getString(0));
libro.put("NombreLibro", cursor.getString(1)); 
libro.put("Fecha", cursor.getString(2));
libro.put("Autor", cursor.getString(3));
                }
return libro ;
}

3.2 Devolvemos todos los libros


public ArrayList<HashMap<String,String>> getAllBooks () 
{
ArrayList<HashMap<String,String>> contenedor = new ArrayList<HashMap<String,String>>(); 
SQLiteDatabase db = getReadableDatabase();
String consulta = "SELECT * FROM "+ tabla_libros;
Cursor cursor = db.rawQuery(consulta, null);
while (cursor.moveToNext())
{
HashMap<String,String> elemento = new HashMap<String,String>();
elemento.put("Id", cursor.getString(0));
elemento.put("NombreLibro", cursor.getString(1)); 
elemento.put("Fecha", cursor.getString(2));
elemento.put("Autor", cursor.getString(3));
contenedor.add(elemento);
                }
cursor.close();
                db.close();
return contenedor;
}

4. Actualización de un libro

public void upgradeBook (int id, String bookName, String bookDate, String author)
{
String consulta_parte1 = "UPDATE "+tabla_libros+" SET ";
String consulta_parte2 = "WHERE _id="+Integer.toString(id) ;
int num_nulos = 3;
if(bookName != null)
{
consulta_parte1 += "nombre='"+ bookName +"' ";
num_nulos -- ;
}
if(bookDate != null)
{
consulta_parte1 += "fecha_edicion='"+ bookDate +"' ";
num_nulos -- ;
}
if(author != null)
{
consulta_parte1 += "nombre_autor='"+ author +"' ";
num_nulos -- ;
}
if(num_nulos != 3)
{
String consulta_final = consulta_parte1 + consulta_parte2;
SQLiteDatabase db = getWritableDatabase();
db.execSQL(consulta_final);
db.close();
}
}



En el siguiente enlace os dejo el fichero java: BDSQLite.

No hay comentarios:

Publicar un comentario