11.android bases de datos

  • View
    231

  • Download
    0

  • Category

    Mobile

Preview:

Citation preview

AndroidBases de Datos

Guido Ticona Hurtadoguidoti@gmail.com

Existen 3 enfoques para usar Bases de Datos◦ 1.Base de Datos Interna (SQLite)◦ 2.Java JDBC◦ 3.Servicios WEB

Bases de datos

No requiere conexión de red Mucho más rápido No requiere seguridad

BD interna SQLite

BD interna SQLite (cont.)

ODMS

11g

DBMS

Servidor

Smartphone

SQLite

Conexión on-line Cualquier DBMS (se requiere driver jdbc) Se requiere tener abiertos los puertos Recomendable para Intranet Usar VPN

JDBC

JDBC (cont.)

Smartphone

DBMS

Servidor

Driver JDBC

Se conectan a cualquier DBMS Los servicios se pueden desarrollar en

cualquier lenguaje y arquitectura Normalmente se usa HTTP Se puede usar SSL

Servicios WEB

Intercambiar datos entre aplicaciones que no necesariamente estan en el mismo lenguaje, sistema operativo o geografia.

SOAP REST

Servicios WEB

Servicios WEB

Smartphone

DBMS

Servidor

HTTPSOAPREST WEB

Open Source Estandar sintaxis SQL Requiere poca memoria 250 kBytes Es transaccional ORM básico para CRUD

SQLite

TEXT => String INTEGER => long REAL => double Otros tipos de datos necesitan ser

convertidos No se hace validación de tipos de datos

Mapeo de Campos

android.database.sqlite.* SQLiteOpenHelper Método construcctor Métodos abstractos onCreate() y

onUpgrade() SQLiteDatabase Métodos insert(), update(), delete() execSQL(), rawQuery y otros

API SQLite

Se crea una Clase Helper para administrar la base de datos

Se crea una clase DAO para administrar los registros de una tabla

Implementación

Esquema ORMSQLiteOpenHelper constructor()

onCreate()onUpdate()

SQLiteDatabaseinsert()delete()update()execSQL()query()rawQuery()

DAOopen()close()CRUD…

Modelogetters()setters()

SQLite Administrator No necesita instalación www.yesdel.com/elfec/sqliteadmin.zip

Administrador SQLite

sqlite3 archivo.db .schema tabla PRAGMA table_info(tabla) .tables .help

Comandos

SQLite ListActivity CursorAdapter Menu Menu Contextual Intent’s Preferencias

Ejemplo

1. Implementar getAll() con orderby, getById() y con _id

2. Implementar Holder 3. Implementar CursorAdapter 4. Implementar principal con ListActivity 5. Implementar Actividad Detalle 6. Implementar onMenuItemSelected() 7. Implementar Intent 8. Implementar interface

OnItemLongClickListener y onItemLongClick()

Pasos

9. Implementar registerForContextMenu(), onCreateContextMenu() con setHeaderTitle()

10. Implementar onContextItemSelected() 11. Implementar XML preferencias 12. Implementar PreferenceActivity con

addPreferencesFromResource() 13. Implementar SharedPreferences con

PreferenceManager.getDefaultSharedPreferences y

registerOnSharedPreferenceChangeListener

Pasos (cont.)

SQLiteDatabase.beginTransaction()

SQLiteDatabase.setTransactionSuccessful()

SQLiteDatabase.endTransaction()

Transacciones

Interfaz estandar para conexion a bases de datos relacionales desde Java

Es un Java API para ejecutar SQL Clases e interfaces estan en java.sql

JDBC

JDBC ClasesDriverManager

Driver

Connection

Statement

ResultSet

Architectura JDBC

Applicación JDBC Driver

Class.forName(“oracle.jdbc.driver.OracleDriver”);

Connection c = DriverManager.getConnection(...);

Registrar un Driver

jdbc:subprotocolo:fuente Cada driver tiene su propio subprotocolo Cada subprotocolo tiene su propia sintaxis Ej: Jdbc:odbc:bdaccess Jdbc:msql://host[:port]/bd

URL JDBC

Mysql com.mysql.jdbc.Driver 3306 jdbc:mysql://[host][:port]/[database] PostgreSQL org.postgresql.Driver 5432 jdbc:postgresql://host:port/database SQL Server

com.microsoft.jdbc.sqlserver.SQLServerDriver 1433

jdbc:microsoft:sqlserver://host:port;db=db;user=;password=

Oracle oracle.jdbc.driver.OracleDriver 1521

jdbc:oracle:thin:@host:port:sid

URL comunes

Connection getConnection (String url, String usuario, String clave)

Ejemplo Class.forName("oracle.jdbc.driver.OracleDriver"); String url = "jdbc:oracle:thin:@192.168.2.1:1521:dev";

this.conn = DriverManager.getConnection(url,"","");

DriverManager

Statement createStatement() PreparedStatement prepareStatement(String sql)

CallableStatement prepareCall(String sql)

Metodos de Conexión

Se usa para ejecutar un SQL ResultSet executeQuery(String) int executeUpdate(String) boolean execute(String)

Statement

Provee acceso a los datos de la tabla El metodo next() mueve a la siguiente fila El metodo close() libera la memoria

ResultSet

CallableStatement proc=null; proc = conn.prepareCall("{ call procedimiento(?, ?) }"); proc.setString(1, var1); proc.setInt(2, var2); proc.execute();

Store Procedures

conn.setAutoCommit(false);

conn.commit();

conn.rollback();

Transacciones

Mapeo de Tipos de DatosSQL JavaCHAR, VARCHAR, LONGVARCHAR StringNUMERIC, DECIMAL BigDecimalBIT booleanTINYINTbyteSMALLINT shortINTEGER intBIGINT longREAL floatFLOAT, DOUBLEdoubleBINARY, VARBINARY, LONGVARBINARY byte[]DATE java.sql.DateTIME java.sql.TimeTIMESTAMP java.sql.Timestamp

<uses-permission android:name="android.permission.INTERNET"/>

StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder()

.permitAll() .build(); StrictMode.setThreadPolicy(policy);

Seguridad Android

Content Providers Compartir datos entre aplicaciones Arquitectura Cliente-Servidor ContentResolver provee el API para el

cliente ContentProvider es el servidor

Proveedores de Contenido

Acceso mediante URI content://com.elfec.agenda/persona/23 Prefix: content:// Authority: com.elfec.agenda Entity: persona Identifier: 23

URI

Paquete android.provider.* Definir un ContentResolver Inicializar con getContentResolver() Usar CRUD (insert, query, update, delete)

Cliente

Contactos => ContactsContract.Contacts Llamadas => CallLog.Calls Eventos => CalendarContract.Events Imagenes=> MediaStore.Images.Media Archivos => MediaStore.Files SMS => “content://sms/” SMS => “content://sms/inbox”

Ejemplos ContentProvider

Heredar de ContentProvider Implementar CRUD onCreate() query() insert() update() delete() getType()

Servidor

Recommended