Tema 4.7 Acceso a datos
-
Upload
carlos-a-iglesias -
Category
Documents
-
view
373 -
download
6
Transcript of Tema 4.7 Acceso a datos
Análisis y Diseño de Software
Departamento de Ingeniería de Sistemas Telemáticoshttp://moodle.dit.upm.es
Acceso a datos
Carlos A. Iglesias <[email protected]>
v1.1 3/05/2013
Acceso a datos 2
Temario
● 4.1 Introducción a Android ● 4.2 Introducción Desarrollo con Android● 4.3 Ejemplo Desarrollo y Depuración ● 4.4 Actividades● 4.5 Interfaces de Usuario● 4.6 Intenciones● 4.7 Acceso a Datos● 4.8 Preferencias● 4.9 Hebras e internacionalización
Acceso a datos 3
Teoría
Ejercicio práctico en el ordenador
Ampliación de conocimientos
Lectura / Vídeo / Podcast
Práctica libre / Experimentación
Leyenda
Acceso a datos 4
● Android Developers
Bibliografía
http://developer.android.com/training/basics/data-storage/index.html
Acceso a datos 5
Objetivos
● Aprender a utilizar almacenamiento persistente ● Recordar bases de datos y SQL● Aprender a crear tablas, y consultar, insertar y borrar datos en una tabla● Aprender a mostrar datos en una lista en una actividad
Acceso a datos 6
Motivación
● En las aplicaciones es habitual querer guardar datos
● Android nos ofrece varias alternativas de almacenamiento persistente:– Bases de datos (este tema)– Pares atributos valor (preferencias)– Sistema de ficheros (interno o externo en SD)– Conexión de red para almacenar datos de forma
remota
Acceso a datos 7
Base de Datos
● Ya vimos en FTEL– Que las Bases de Datos permitían guardar
datos de forma persistente– Que con SQL podíamos realizar diversas
operaciones, como consultar (SELECT-FROM), modificar (UPDATE), borrar (DELETE) o insertar datos (INSERT)
Acceso a datos 9
SQLite
● Utilizada internamente por Firefox y Thuderbird
● Usada en múltiples sistemas operativos para dispositivos móviles (Android, iOS, Blackberry OS)
● No tiene claves ajenas (FOREIGN KEYS)
Acceso a datos 10
Repaso SQL – create table
create table tblLIBROS (libroID integer PRIMARY KEY autoincrement, titulo text, autor text, anno integer)
Tipos: text, varchar, integer, float, numeric, date, time, timestamp,
boolean, blob, etc.http://sqlite.org/datatype3.html
Acceso a datos 11
Repaso SQL - insertar
insert into tblLIBROS(autor, titulo, anno) VALUES ('autor1', 'libro1', 2001);insert into tblLIBROS(autor, titulo, anno) VALUES ('autor2', 'libro2', 2002);insert into tblLIBROS(autor, titulo, anno) VALUES ('autor1', 'libro3', 2001);insert into tblLIBROS(autor, titulo, anno) VALUES ('autor4', 'libro4', 2004);
Acceso a datos 12
Consultar (select-from) (I)
● select [distinct] <campos> from <tablas> where <condicion>group by <campos> having <grupos>order by <campos> [ASC|DESC];● Ej. listar todos los autores
● Ej. listar autor, titulo y año anterior a 2002 select distinct autor from tblLIBROS;
select * from tblLIBROS where anno <= 2002;
Acceso a datos 13
Consultar (select-from) (II)
● Ej. listar autor, titulo y año anterior a 2002 ordenado por autor
● Ej. listar cuántos autores hay por año
select * from tblLIBROS where anno <= 2002 ordered by autor;
select anno, count(*) from tblLIBROS grouped by anno;
Acceso a datos 14
Usando BBDD en Android
● Debemos extender la clase SQLiteOpenHelper y sobreescribir onCreate() para crear las tablas en la base de datos
● Para escribir y leer debemos llamar a los métodos getWritableDatabase() o getReadableDatabase() que nos devuelven un objeto SQLiteDatabase
● SQLiteDatabase tiene métodos para ejecutar sentencias SQL
Acceso a datos 15
SQLiteDatabase
● Nos da dos interfaces:– Ejecutar SQL
• execSQL(String sql) → CREATE, INSERT, UPDATE, DELETE
• rawQuery(String sql, String [] args) → SELECT
– Orientada a objetos (veremos)• query(), delete(), insert(), update()
● Las consultas (queries) devuelven un Cursor que apunta a los registros (filas) del resultado de la consulta
Acceso a datos 16
Ejemplo
SQLiteDatabase db = SQLiteDatabase.openOrCreate(“ejemplo.libros”, MODE_PRIVATE, null);String sql = "create table tblLIBROS ("
+ "libroID integer PRIMARY KEY autoincrement, "+ "titulo text, "+ "autor text, "+ "anno integer"+ ");";
db.execSQL(sql);String sqlInsert = "insert into tblLIBROS (autor, titulo, anno) VALUES ('autor1', 'libro1', 2001); ";db.execSQL(sql);String sqlSelect = "select distinct autor from tblLIBROS;";Cursor c = db.rawQuery(sqlSelect, null);int autorIdCol = c.getColumnIndex("autor");while (c.moveToNext()) {
Log.d(c.getString(autorIdCol));}
Cursor
Acceso a datos 17
Base de datos en /data/data
Acceso a datos 18
Ejemplo SQL - EjemploBaseDatosActivity
Llama a onCreate() de
DBHelper
Acceso a datos 19
Ejemplo SQL DBHelper (I)
Acceso a datos 20
Ejemplo SQL DBHelper (II)
Acceso a datos 21
Ejemplo SQL DBHelper (III)
int autorIdCol = c.getColumnIndex("autor");while (c.moveToNext()) {
Log.d(c.getString(autorIdCol));}
Acceso a datos 22
Ejemplo SQL DBHelper (IV)
Acceso a datos 23
Consultas parametrizadas
● Podemos usar sentencias SQL parametrizadas● Ej.
String sql = “select * from tblLIBROS where anno >= ? and anno <= ?”;String [] args = {“2000”, “2004” };db.execSQL(sql, args);
Acceso a datos 24
SQLiteDatabase - query()
query(String tabla, String [] columnas, String where, String [] whereArgs, String groupBy, String having, String orderBy);
select columnas from tablawhere seleccióngroup by columnas having condicionorder by columnas
String sql = “select nombre, apellidos, sueldo from Empleados “;sql += “where sueldo >= ? and sueldo <= ? ”;sql += “order by nombre, apellidos”;String [] args = {“1000”, “2000”};Cursor c = db.rawQuery(sql, args);
String [] cols = {“nombre”, “apellidos”, “sueldo”};String where = “sueldo >= ? and sueldo <= ?”;String [] whereArgs = {“1000”, “2000”};String order = “nombre, apellidos”;Cursor c = db.query(“Empleados”, cols, where, whereArgs, null, null, order);
Acceso a datos 25
SQLiteDatabasedelete(),insert()
public int delete(String tabla, String where, String [] whereArgs);public long insert(String tabla, String nullColumnHack, ContentValues valores);
String sqlInsert = “insert into Empleados values( 'Pepe', 'Pérez', '1000');db.execSQL(sqlInsert);
String sqlDelete = “delete from Empleados where nombre = 'Pepe'”;db.execSQL(sqlDelete);
db.delete(“Empleados”,”nombre = 'Pepe'” , null);
ContentValues valores = new ContentValues(); // Map<String, String>valores.put(“nombre”, “Pepe”);valores.put(“apellidos”, “Perez”);valores.put(“sueldo”, “1000”);db.insert(“Empleados”, null, valores);
NullColumnHack: pasar null si todas las columnas deben ser NOT NULL, o bien el
nombre de una columna que puede ser null
Acceso a datos 26
SQLiteDatabase - update()
public int update(String tabla, ContentValues valores, String where, String [] whereArgs);
ContentValues valores = new ContentValues(); // Map<String,String>valores.put(“nombre”, “Jose”);
db.update(“Empleados”, valores, “nombre='Pepe'”, null);
String sqlUpdate = “update Empleados set nombre = 'Jose' where nombre = 'Pepe'”;db.execSQL(sqlUpdate);
Acceso a datos 27
Borrar la BD... Settings → Applications
Acceso a datos 28
Ejemplo ListaCompra
● Vamos a crear una BD para ella lista de la compra– La encapsulamos en una clase
ProductoDbAdaptador
Acceso a datos 29
Patrón de Diseño DAO
● DAO (Data Access Object)
● Un DAO contiene una conexión a una base de datos y sus operaciones básicas, ocultando su implementación
● En nuestro caso, ProductoDbAdaptador sigue el patrón DAO del valor Producto
Acceso a datos 30
Clases BBDD
Acceso a datos 31
Producto
+ setters, getters, ...
Acceso a datos 32
ProductoDbAdaptador (I)
Acceso a datos 33
ProductoDbAdaptador (II)
Acceso a datos 34
ProductoDbAdaptador (IV)
Acceso a datos 35
DBHelper
Acceso a datos 36
La aplicación ...
Acceso a datos 37
Las actividades...
Puedopasar también
Productocon Serializable
ver ejemplo
Acceso a datos 38
ListaCompraActivity (I)
Acceso a datos 39
Adaptador
● Conectan una vista con una fuente de datos
Fuente de datosAdaptador
Acceso a datos 40
SimpleCursorAdaptor
● La clase SimpleCursorAdaptor nos permite adaptar una base de datos a una vista– Debemos describir un registro (fila, los datos
(el cursor) y la correspondencia entre datos y la vista
Acceso a datos 41
ListaCompraActivity (II)
Acceso a datos 42
ListaCompraActivity (III)
Acceso a datos 43
ListaCompraActivity (IV)
Acceso a datos 44
ListaCompraActivity (V)
Acceso a datos 45
ListaCompraActivityonActivityResult (I)
Acceso a datos 46
ListaCompraActivityonActivityResult (II)
Acceso a datos 47
DetalleProductoActivity (I)
Acceso a datos 48
DetalleProductoActivity (II)
Acceso a datos 49
DetalleProductoActivity (III)
Acceso a datos 50
Resumen
● En este tema hemos aprendido – Cómo almacenar, consultar, borrar, insertar y
actualizar bases de datos en Android– Cómo manejar cursores de bases de datos– Patrones de diseño como DAO o adaptador– Cómo extender una actividad con
funcionalidad común– Cómo mostrar datos en una vista con un
adaptador
Acceso a datos 51
¿Preguntas?