Download SQLITE Database

Document related concepts

SQLite wikipedia , lookup

Cursor (base de datos) wikipedia , lookup

Java Database Connectivity wikipedia , lookup

Navicat wikipedia , lookup

LevelDB wikipedia , lookup

Transcript
Clase:013
1
Unidad IV
Aplicaciones sobre
Base de Datos
2
Agenda
• PROGRAMA DE MANIPULACION DE BASE
• ANDROID
• SQLITE
• SQLITE OpenHelper
• SQLITE Database
• Cursor
• Ejemplos
• Agregar controles según campo
• Usar query para funciones de
agregado
3
SQLITE
• Sin Configuración: SQLite no necesita ser
instalado, no necesita iniciar procesos, no
necesita una configuración inicial o cualquier
otro. SQLite es una librería, no un motor de base
de datos
• Transaccional: SQLite realiza transacciones que
cumplen con ACID(Atomic, Consistent, Isolated,
Durable). Para realizar estos realiza un proceso
de Serializacion.
4
SQLITE
Dependiendo de la versión de SQLite que se
encuentre instalada en la versión de Android donde
se ejecuta la aplicación, podemos usar las
siguientes características:
Creación, Alteración y eliminación de tablas
Vistas
Índices
Llaves extranjeras
Integridad Referencial
Soporte para datos tipo BLOB
Soporte para Transacciones
Tablas temporales
Y muchas mas…
5
SQLITE
Android provee varios métodos, clases, interfaces,
etc para construir, consultar, actualizar, crear,
actualizar y borrar registros, etc. Entre estos
tenemos
• SQLiteOpenHelper
Provee los métodos para crear o actualizar una
base de datos
• SQLiteDatabase
Provee los métodos para realizar querys contra la
base de datos. También provee métodos para
realizar inserts, updates y deletes.
• Cursor
Almacena los resultados devueltos por un query. Y
provee métodos para moverse de uno en uno.
6
SQLITE OpenHelper
Luego de tener creada nuestra implementación del
SQLiteOpenHelper, es decir, tenemos creada nuestra base de
datos, creamos una instancia a traves llamando directamente al
Constructor.
• Si Android encuentra que esa base de datos no existe,
ejecutara a la implementación del metodo onCreate(). Sino nos
devolverá un SQLiteOpenHelper con la podemos recuperar la
base de datos.
• Si Android encuentra que la base de datos tiene una versión
diferente de la especificada en su método onCreate(), ejecutara
el método onUpgrade() para llevar a la base de datos a la
nueva versión.
• En el método onUpgrade() es llamado para realizar tareas
como mover la información, eliminar las tablas existentes, etc.
7
SQLITE Database
• Una vez tenemos implementado los métodos para crear y/o
actualizar la base de datos, usamos los métodos del
SQLiteOpenHelper getWritableDatabase () y
getReadableDatabase () para obtener un objeto
SQLiteDatabase.
• Los métodos hacen exactamente lo mismo y devuelven el
mismo objeto. La diferencia es que si por algún motivo la base
de datos no puede ser abierta getWritableDatabase() lanzara
un excepción y getReadableDatabase() intentara abrir la base
de datos en modo solo lectura, sino lo consigue, lanzara una
excepción.
• Debemos tener el cuidado siempre de que al terminar la
operación o transacciones a nuestra base de datos llamamos
al método close() del SQLiteOpenHelper para cerrar cualquier
base de datos abierta y recuperar recursos.
8
SQLITE Database
• El objeto SQLiteDatabase ofrece varios métodos
para ejecutar consultas sobre la base de datos.
Como por ejemplo:
• execSQL(String sql)
• Ejecuta un consulta SQL que no devuelve
parámetros ni el numero de filas afectadas.
9
SQLITE Database
• Para insertar registros usamos el método :
• long insert (String table, String
nullColumnHack, ContentValues values)
• El parámetro nullColumnHack, especifica las
columnas en donde ser debe de insertar un
null. Este parámetro solo se insertara para
producir una fila en blanco. Normalmente ira
null
10
SQLITE Database
• Ejemplo de insert
11
SQLITE Database
• Para actualizar llamamos al método int update (String table,
ContentValues values, String whereClause, String[] whereArgs)
que nos devuelve el numero de filas afectadas
• Si pasamos null en el parámetro “whereClause” todas las filas
de la tabla serán actualizadas con los valores.
• La clausula where puede ser especificada totalmente en texto
concatenando valores, así:
Db.update(DATABASE_TABLE, args, KEY_ROWID + "=" + rowId,
null)
• O podemos construirla para pasar los parametros en un arreglo
de strings, así:
mDb.update(DATABASE_TABLE, args, KEY_ROWID + "=?",
String[] {rowid});
12
SQLITE Database
• Para borrar registros, usamos el método:
int delete (String table, String whereClause,
String[] whereArgs)
• A este método se le especifica el nombre de
la tabla, la clausula where y los argumentos
si existieran.
• Si pasamos null, a la clausula where
eliminamos todos los registros de la tabla.
13
SQLITE Database
• Para realizar consultas de SELECT a la
base de datos, el objeto SQLiteDatabase
nos expone diferentes métodos para crear
estas consultas con agregaciones, clausulas
Where, having, order by etc.
• Estos métodos devuelven un Objeto de tipo
Cursor el cual permite leer los registros uno
a uno.
• El método se llama query y posee 3
variantes dependiendo de los parámetros
que se le especifican
14
SQLITE Database
Devuelve un cursor que ejecuta el select.
• Para crear estas consultas, ocupamos la misma sintaxis de
SQL normal, excepto que no incluimos las palabras
reservadas(SELECT, GROUP BY, WHERE, etc.). SQLite las
construye por nosotros
• Pasando null a algún parámetro, provoca que se excluya la
clausula. Por ejemplo, un null en el parámetro columns,
devolverá todas las columnas(*), así que como un null en
selection devolverá todas las filas(No existe un WHERE).
15
SQLITE Database
Otras formas del método query son:
El método anterior no incluye el parámetro limit. Por lo
tanto no se puede limitar el numero de filas devueltas
Este método, devuelve solo las filas cuya combinación de
columnas es única, si el parámetro distinct es pasado en
true.
16
SQLITE Database
Otro método útil para crear consultas SELECT es:
• rawQuery ejecuta una consulta SQL completa y devuelve
un cursos con los resultados.
• No debemos pasar el ; al final de la consulta. De lo
contrario se producirá un error.
17
Cursor
Una vez que hemos ejecutado la consulta y tenemos una
instancia del Cursor, podemos extraer la información a través
de varios métodos provistos por el.
• Por default el cursor, se encuentra en la posición -1, es
decir, antes de la primera fila.
• Para colocar el cursor en al primera fila llamamos al
método Cursor.moveToFirst(); lo que provoca que el cursor
se coloque en la fila 0. Este método devuelve true si el
movimiento resulto exitoso o false si no existen datos.
• Otros métodos similares son moveToNext (),
moveToPrevious (), moveToLast (), moveToPosition
(int position).
18
Cursor
• Cuando el cursor esta colocado en la posición deseada, el
objeto provee métodos para extraer información
dependiendo del tipo de dato
• Por ejemplo, getBlob(int columnIndex) nos regresa un
arreglo de bytes, getDouble(int columnIndex) un objeto
tipo double, etc.
• Un método útil para extraer el tipo de datos y evitar
excepciones de casting es getType(int columnIndex), que
nos devuelve el tipo de datos. Tambien podemos usar este
metodo para comprobar si un dato es nulo
• getType devuelve un entero que corresponde a valores
definidos en la clase cursor, que corresponden a las
constantes:
Cursor.FIELD_TYPE_STRING
19
Cursor
Cursor.FIELD_TYPE_BLOB
Cursor.FIELD_TYPE_FLOAT
Cursor.FIELD_TYPE_INTEGER
Cursor.FIELD_TYPE_NULL
• El índice que se pasa a estos métodos, puede ser
recuperado usando el método getColumnIndex(String
columnName) al cual especificamos el nombre de la
columna.
20