Successfully reported this slideshow.
Análisis y Diseñode SoftwareDepartamento de Ingeniería de Sistemas Telemáticoshttp://moodle.dit.upm.esAcceso a datosCarlos...
Acceso a datos 2Temario● 4.1 Introducción a Android● 4.2 Introducción Desarrollo con Android● 4.3 Ejemplo Desarrollo y Dep...
Acceso a datos 3TeoríaEjercicio práctico en el ordenadorAmpliación de conocimientosLectura / Vídeo / PodcastPráctica libre...
Acceso a datos 4● Android DevelopersBibliografíahttp://developer.android.com/training/basics/data-storage/index.html
Acceso a datos 5Objetivos● Aprender a utilizar almacenamientopersistente● Recordar bases de datos y SQL● Aprender a crear ...
Acceso a datos 6Motivación● En las aplicaciones es habitual quererguardar datos● Android nos ofrece varias alternativas de...
Acceso a datos 7Base de Datos● Ya vimos en FTEL– Que las Bases de Datos permitían guardardatos de forma persistente– Que c...
Acceso a datos 8SQLite y Androidhttp://www.sqlite.org/
Acceso a datos 9SQLite● Utilizada internamente por Firefox yThuderbird● Usada en múltiples sistemas operativospara disposi...
Acceso a datos 10Repaso SQL – create tablecreate table tblLIBROS (libroID integer PRIMARY KEY autoincrement,titulo text,au...
Acceso a datos 11Repaso SQL - insertarinsert into tblLIBROS(autor, titulo, anno) VALUES (autor1, libro1, 2001);insert into...
Acceso a datos 12Consultar (select-from) (I)● select [distinct] <campos>from <tablas>where <condicion>group by <campos> ha...
Acceso a datos 13Consultar (select-from) (II)● Ej. listar autor, titulo y año anterior a 2002ordenado por autor● Ej. lista...
Acceso a datos 14Usando BBDD en Android● Debemos extender la claseSQLiteOpenHelper y sobreescribir onCreate()para crear la...
Acceso a datos 15SQLiteDatabase● Nos da dos interfaces:– Ejecutar SQL• execSQL(String sql) → CREATE, INSERT, UPDATE,DELETE...
Acceso a datos 16EjemploSQLiteDatabase db = SQLiteDatabase.openOrCreate(“ejemplo.libros”,MODE_PRIVATE, null);String sql = ...
Acceso a datos 17Base de datos en /data/data
Acceso a datos 18Ejemplo SQL -EjemploBaseDatosActivityLlama aonCreate() deDBHelper
Acceso a datos 19Ejemplo SQL DBHelper (I)
Acceso a datos 20Ejemplo SQL DBHelper (II)
Acceso a datos 21Ejemplo SQL DBHelper (III)int autorIdCol = c.getColumnIndex("autor");while (c.moveToNext()) {Log.d(c.getS...
Acceso a datos 22Ejemplo SQL DBHelper (IV)
Acceso a datos 23Consultas parametrizadas● Podemos usar sentencias SQLparametrizadas● Ej.String sql = “select * from tblLI...
Acceso a datos 24SQLiteDatabase - query()query(String tabla, String [] columnas,String where, String [] whereArgs,String g...
Acceso a datos 25SQLiteDatabasedelete(),insert()public int delete(String tabla, String where, String [] whereArgs);public ...
Acceso a datos 26SQLiteDatabase - update()public int update(String tabla, ContentValues valores, String where, String [] w...
Acceso a datos 27Borrar la BD...Settings → Applications
Acceso a datos 28Ejemplo ListaCompra● Vamos a crear una BD para ella lista dela compra– La encapsulamos en una claseProduc...
Acceso a datos 29Patrón de Diseño DAO● DAO (Data Access Object)● Un DAO contiene una conexión a unabase de datos y sus ope...
Acceso a datos 30Clases BBDD
Acceso a datos 31Producto+ setters, getters, ...
Acceso a datos 32ProductoDbAdaptador (I)
Acceso a datos 33ProductoDbAdaptador (II)
Acceso a datos 34ProductoDbAdaptador (IV)
Acceso a datos 35DBHelper
Acceso a datos 36La aplicación ...
Acceso a datos 37Las actividades...Puedopasar tambiénProductocon Serializablever ejemplo
Acceso a datos 38ListaCompraActivity (I)
Acceso a datos 39Adaptador● Conectan una vista con una fuente dedatosFuente de datosAdaptador
Acceso a datos 40SimpleCursorAdaptor● La clase SimpleCursorAdaptor nospermite adaptar una base de datos a unavista– Debemo...
Acceso a datos 41ListaCompraActivity (II)
Acceso a datos 42ListaCompraActivity (III)
Acceso a datos 43ListaCompraActivity (IV)
Acceso a datos 44ListaCompraActivity (V)
Acceso a datos 45ListaCompraActivityonActivityResult (I)
Acceso a datos 46ListaCompraActivityonActivityResult (II)
Acceso a datos 47DetalleProductoActivity (I)
Acceso a datos 48DetalleProductoActivity (II)
Acceso a datos 49DetalleProductoActivity (III)
Acceso a datos 50Resumen● En este tema hemos aprendido– Cómo almacenar, consultar, borrar, insertar yactualizar bases de d...
Acceso a datos 51¿Preguntas?
Upcoming SlideShare
Loading in …5
×

Tema 4.7 Acceso a datos

564 views

Published on

  • Be the first to comment

  • Be the first to like this

Tema 4.7 Acceso a datos

  1. 1. Análisis y Diseñode SoftwareDepartamento de Ingeniería de Sistemas Telemáticoshttp://moodle.dit.upm.esAcceso a datosCarlos A. Iglesias <cif@gsi.dit.upm.es>v1.1 3/05/2013
  2. 2. Acceso a datos 2Temario● 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
  3. 3. Acceso a datos 3TeoríaEjercicio práctico en el ordenadorAmpliación de conocimientosLectura / Vídeo / PodcastPráctica libre / ExperimentaciónLeyenda
  4. 4. Acceso a datos 4● Android DevelopersBibliografíahttp://developer.android.com/training/basics/data-storage/index.html
  5. 5. Acceso a datos 5Objetivos● Aprender a utilizar almacenamientopersistente● 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 enuna actividad
  6. 6. Acceso a datos 6Motivación● En las aplicaciones es habitual quererguardar datos● Android nos ofrece varias alternativas dealmacenamiento 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 formaremota
  7. 7. Acceso a datos 7Base de Datos● Ya vimos en FTEL– Que las Bases de Datos permitían guardardatos de forma persistente– Que con SQL podíamos realizar diversasoperaciones, como consultar(SELECT-FROM), modificar (UPDATE), borrar(DELETE) o insertar datos (INSERT)
  8. 8. Acceso a datos 8SQLite y Androidhttp://www.sqlite.org/
  9. 9. Acceso a datos 9SQLite● Utilizada internamente por Firefox yThuderbird● Usada en múltiples sistemas operativospara dispositivos móviles (Android, iOS,Blackberry OS)● No tiene claves ajenas (FOREIGN KEYS)
  10. 10. Acceso a datos 10Repaso SQL – create tablecreate 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
  11. 11. Acceso a datos 11Repaso SQL - insertarinsert 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);
  12. 12. Acceso a datos 12Consultar (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 2002select distinct autor from tblLIBROS;select * from tblLIBROS where anno <= 2002;
  13. 13. Acceso a datos 13Consultar (select-from) (II)● Ej. listar autor, titulo y año anterior a 2002ordenado por autor● Ej. listar cuántos autores hay por añoselect * from tblLIBROS where anno <= 2002 ordered by autor;select anno, count(*) from tblLIBROS grouped by anno;
  14. 14. Acceso a datos 14Usando BBDD en Android● Debemos extender la claseSQLiteOpenHelper y sobreescribir onCreate()para crear las tablas en la base de datos● Para escribir y leer debemos llamar a losmétodos getWritableDatabase() ogetReadableDatabase() que nos devuelven unobjeto SQLiteDatabase● SQLiteDatabase tiene métodos para ejecutarsentencias SQL
  15. 15. Acceso a datos 15SQLiteDatabase● 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 unCursor que apunta a los registros (filas) delresultado de la consulta
  16. 16. Acceso a datos 16EjemploSQLiteDatabase 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
  17. 17. Acceso a datos 17Base de datos en /data/data
  18. 18. Acceso a datos 18Ejemplo SQL -EjemploBaseDatosActivityLlama aonCreate() deDBHelper
  19. 19. Acceso a datos 19Ejemplo SQL DBHelper (I)
  20. 20. Acceso a datos 20Ejemplo SQL DBHelper (II)
  21. 21. Acceso a datos 21Ejemplo SQL DBHelper (III)int autorIdCol = c.getColumnIndex("autor");while (c.moveToNext()) {Log.d(c.getString(autorIdCol));}
  22. 22. Acceso a datos 22Ejemplo SQL DBHelper (IV)
  23. 23. Acceso a datos 23Consultas parametrizadas● Podemos usar sentencias SQLparametrizadas● Ej.String sql = “select * from tblLIBROS where anno >= ? and anno <= ?”;String [] args = {“2000”, “2004” };db.execSQL(sql, args);
  24. 24. Acceso a datos 24SQLiteDatabase - 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 columnasString 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);
  25. 25. Acceso a datos 25SQLiteDatabasedelete(),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 lascolumnas deben ser NOT NULL, o bien elnombre de una columna que puede ser null
  26. 26. Acceso a datos 26SQLiteDatabase - 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);
  27. 27. Acceso a datos 27Borrar la BD...Settings → Applications
  28. 28. Acceso a datos 28Ejemplo ListaCompra● Vamos a crear una BD para ella lista dela compra– La encapsulamos en una claseProductoDbAdaptador
  29. 29. Acceso a datos 29Patrón de Diseño DAO● DAO (Data Access Object)● Un DAO contiene una conexión a unabase de datos y sus operaciones básicas,ocultando su implementación● En nuestro caso, ProductoDbAdaptadorsigue el patrón DAO del valor Producto
  30. 30. Acceso a datos 30Clases BBDD
  31. 31. Acceso a datos 31Producto+ setters, getters, ...
  32. 32. Acceso a datos 32ProductoDbAdaptador (I)
  33. 33. Acceso a datos 33ProductoDbAdaptador (II)
  34. 34. Acceso a datos 34ProductoDbAdaptador (IV)
  35. 35. Acceso a datos 35DBHelper
  36. 36. Acceso a datos 36La aplicación ...
  37. 37. Acceso a datos 37Las actividades...Puedopasar tambiénProductocon Serializablever ejemplo
  38. 38. Acceso a datos 38ListaCompraActivity (I)
  39. 39. Acceso a datos 39Adaptador● Conectan una vista con una fuente dedatosFuente de datosAdaptador
  40. 40. Acceso a datos 40SimpleCursorAdaptor● La clase SimpleCursorAdaptor nospermite adaptar una base de datos a unavista– Debemos describir un registro (fila, los datos(el cursor) y la correspondencia entre datos yla vista
  41. 41. Acceso a datos 41ListaCompraActivity (II)
  42. 42. Acceso a datos 42ListaCompraActivity (III)
  43. 43. Acceso a datos 43ListaCompraActivity (IV)
  44. 44. Acceso a datos 44ListaCompraActivity (V)
  45. 45. Acceso a datos 45ListaCompraActivityonActivityResult (I)
  46. 46. Acceso a datos 46ListaCompraActivityonActivityResult (II)
  47. 47. Acceso a datos 47DetalleProductoActivity (I)
  48. 48. Acceso a datos 48DetalleProductoActivity (II)
  49. 49. Acceso a datos 49DetalleProductoActivity (III)
  50. 50. Acceso a datos 50Resumen● En este tema hemos aprendido– Cómo almacenar, consultar, borrar, insertar yactualizar 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 confuncionalidad común– Cómo mostrar datos en una vista con unadaptador
  51. 51. Acceso a datos 51¿Preguntas?

×