Android con conexión a Base de Datos SQLite
I.
Tema: Android con conexión a Base de Datos SQLite
1.
Contenido
§ Definición
Sqlite es una base de
datos opensource compatible con funciones relacionales, sql, transacciones,
declaraciones preparadas, tipos TEXT, INTEGER, Real, y sobre todo ideal para dispositivos
móviles.
Sqlite viene incrustado en
todos los dispositivos android lo que nos facilita la tarea, solo tenemos que
definir las sentencias SQL para crear y actualizar nuestra base de datos y
android se encarga del resto.
El paquete android.database contiene
todas las clases necesarias para trabajar con bases de datos en android.
El
paquete android.database.sqlite contiene las clases específicas de
SQLite.
§ Clases
1.
SQLiteCursor
↳
|
|||
↳
|
|||
↳
|
android.database.sqlite.SQLiteCursor
|
Una
implementación de Cursor que expone los resultados de una consulta en
a SQLiteDatabase. SQLiteCursor no está sincronizado internamente, por
lo que el código que utiliza un SQLiteCursor de varios subprocesos debe
realizar su propia sincronización cuando usa el SQLiteCursor.
Ejecute una
consulta y proporcione acceso a su conjunto de resultados a través de una
interfaz de Cursor. Para una
consulta como:
SELECT
name, birth, phone FROM myTable WHERE ...
LIMIT
1,20 ORDER BY...
los nombres de las columnas (nombre, nacimiento, teléfono) estarían
en el argumento de proyección y todo lo deFROM
adelante
estaría en el argumento params.
Métodos
públicos
Cerca
vacío público cerca ()
Cierra el
cursor, liberando todos sus recursos y volviéndolo completamente
inválido. A diferencia de
deactivate()
un llamado a requery()
, no hará que el Cursor
sea válido nuevamente.
Desactivar
public void deactivate ()
Desactiva
el Cursor, haciendo que todas las llamadas en él fallen hasta que
requery()
se llame. Los cursores inactivos usan
menos recursos que los cursores activos. La llamada requery()
volverá a activar el cursor.
2. SQLiteDatabase
↳
|
||
↳
|
android.database.sqlite.SQLiteDatabase
|
Expone métodos para administrar una base de datos SQLite.
SQLiteDatabase tiene métodos para crear, eliminar, ejecutar
comandos SQL y realizar otras tareas comunes de administración de bases de
datos.
Consulte la aplicación de ejemplo Bloc de notas en el SDK para
ver un ejemplo de creación y administración de una base de datos.
Los nombres de las bases de datos deben ser únicos dentro de una
aplicación, no en todas las aplicaciones.
3.
SQLiteOpenHelper
↳
|
android.database.sqlite.SQLiteOpenHelper
|
Una
clase de ayuda para gestionar la creación de bases de datos y la administración
de versiones.
Usted crea
una subclase que
implementa y onCreate(SQLiteDatabase), onUpgrade(SQLiteDatabase,
int, int)opcionalmente onOpen(SQLiteDatabase), esta clase se encarga de
abrir la base de datos si existe, crearla si no es así y actualizarla según sea
necesario. Las transacciones se utilizan para garantizar que la base de
datos esté siempre en un estado sensible.
Esta
clase facilita a las ContentProvider implementaciones diferir la
apertura y actualización de la base de datos hasta el primer uso, para evitar
el bloqueo del inicio de la aplicación con actualizaciones de base de datos de
larga ejecución.
Constructores
públicos
público SQLiteOpenHelper ( context Context ,
String name,
SQLiteDatabase.CursorFactory factory,
versión int)
Cree un objeto auxiliar para
crear, abrir y / o administrar una base de datos. Este método siempre
regresa muy rápido. La base de datos no se crea o abre hasta que se
llama getWritableDatabase()ogetReadableDatabase()se llama.
4.
SQLiteQueryBuilder
↳
|
android.database.sqlite.SQLiteQueryBuilder
|
Esta es una clase de conveniencia
que ayuda a generar consultas SQL para enviarlas a SQLiteDatabase objetos.
Constructores públicos
appendColumns
public static void appendColumns ( StringBuilder s,
String [] columnas)
Agregue
los nombres que no son nulos en columnas a s, separándolos con comas.
appendWhere
public void appendWhere ( CharSequence inwhere)
Adjunte
un fragmento a la cláusula WHERE de la consulta. Todos los fragmentos
adjuntos están rodeados por paréntesis y ANDed con la selección pasada a query(SQLiteDatabase,
String[], String, String[], String, String, String). La última cláusula
WHERE se ve así: DONDE (<agregar fragmento 1> <agregar fragmento2>)
AND (<parámetro de selección query ()>
appendWhereEscapeString
public void appendWhereEscapeString ( String in Where)
Adjunte
un fragmento a la cláusula WHERE de la consulta. Todos los fragmentos
adjuntos están rodeados por paréntesis y ANDed con la selección pasada a query(SQLiteDatabase,
String[], String, String[], String, String, String). La última
cláusula WHERE se ve así: DONDE (<agregar fragmento 1> <agregar
fragmento2>) AND (<parámetro de selección query ()>)
5. SQLite Statement.
↳
|
|||
↳
|
|||
↳
|
android.database.sqlite.SQLiteStatement
|
Representa una declaración que se puede ejecutar en una base de datos.
La instrucción no puede devolver varias filas o columnas, pero se admiten
conjuntos de resultados de valor único (1 x 1).
Esta clase no es segura para subprocesos.
§ Ejemplos
SQLiteDatabase
/ **
* {@inheritDoc}
* / @Override public Cursor newCursor ( SQLiteDatabase db , SQLiteCursorDriver driver , String editTable , SQLiteQuery query ) {
// Crear un cursor estándar Cursor cursor = new SQLiteCursor ( driver , editTable , query );
// Comprobar si hay una mesa de edición si ( EditTable ! = Nula ) { // Comprobar si la tabla tiene un envoltorio cursor GeoPackageCursorWrapper cursorWrapper = tableCursors . get ( editTable ); if ( cursorWrapper ! = null ) {
cursor = cursorWrapper . wrapCursor ( cursor ); } }
devolver el cursor ; }
Ejemplo simple:
·
Alta de usuarios: tras introducir los datos, hacemos clic en el botón
de alta para que automáticamente se almacenen en la base de datos.
·
Consulta DNI: introduce el DNI que has almacenado, para que te
muestre toda la información del usuario.
·
Baja: introduce el DNI del usuario que quieras dar de
baja, y al hacer clic aquí automáticamente se dará de baja.
·
Modificación de datos: introduce el DNI del usuario que quieres modificar
los datos, tan solo tendrás que cambiar los datos que quieras. Haces una
consulta, cambias los parámetros que quieras y luego, los modificas.
SQLiteCursor
private void bindPreHoneycomb ( fila JSONObject , clave String , cursor Cursor , int i ) throws JSONException { // Dado que cursor.getType () no está disponible pre-honeycomb, esto // es una solución para que no tengamos que enlazar todo como una cadena // Detalles aquí: http://stackoverflow.com/q/11658239 SQLiteCursor sqLiteCursor = ( SQLiteCursor ) cursor ; CursorWindow cursorWindow = sqLiteCursor . getWindow ();
int pos = cursor . getPosition (); if ( cursorWindow . isNull ( pos , i )) {
fila . put ( clave , JSONObject . NULL ); } else if ( cursorWindow . isLong ( pos , i )) {
fila . put ( clave , cursor . getLong ( i)
)); } else if ( cursorWindow . isFloat ( pos , i )) {
fila . put ( clave , cursor . getDouble ( i )); / * ** Leer BLOB como Base-64 DESACTIVADO en esta rama:
} else if (cursorWindow.isBlob (pos, i)) {
row.put (clave, nueva cadena (Base64.encode (cursor.getBlob (i), Base64.DEFAULT)));
// ** Leer BLOB como Base-64 DESACTIVADO para AQUÍ. * / } else { //
fila de cadena . put ( clave , cursor . getString ( i )); } }
SQLiteOpenHelper
public class AgendaSqlite extends SQLiteOpenHelper {
//Sentencia para crear la tabla de Usuarios
String sqlCreate = "CREATE TABLE Agenda (codigo INTEGER, nombre TEXT, apellido TEXT, telefono TEXT)";
public AgendaSqlite(Context context, String name, CursorFactory factory,int version) {
super(context, name, factory, version);
}
String sqlCreate = "CREATE TABLE Agenda (codigo INTEGER, nombre TEXT, apellido TEXT, telefono TEXT)";
public AgendaSqlite(Context context, String name, CursorFactory factory,int version) {
super(context, name, factory, version);
}
@Override
public void onCreate(SQLiteDatabase db) {
//Se ejecuta la sentencia SQL de creación de la tabla
db.execSQL(sqlCreate);
}
public void onCreate(SQLiteDatabase db) {
//Se ejecuta la sentencia SQL de creación de la tabla
db.execSQL(sqlCreate);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// En la practica deberemos migrar datos de la tabla antigua
// a la nueva, por lo que este método debería ser más elaborado.
//Eliminamos la versión anterior de la tabla
db.execSQL("DROP TABLE IF EXISTS Usuarios");
//y luego creamos la nueva
db.execSQL(sqlCreate);
}
}
SQLiteQueryBuilder
vacío estático privado handleMovieFull ( SQLiteQueryBuilder qb ) { if ( DBG ) Log . d ( TAG , "El archivo es una película." );
qb . setTables ( ScraperTables . MOVIE_TABLE_NAME + "LEFT JOIN" + ScraperTables . FILMS_MOVIE_VIEW_NAME + "ON (" + ScraperTables . MOVIE_TABLE_NAME + "" + ScraperStore . Película . ID + "=" + ScraperTables . FILMS_MOVIE_VIEW_NAME + "" + ScraperStore . Película . Directora . PELÍCULA + ")" +
"LEFT JOIN" + ScraperTables . PLAYS_MOVIE_VIEW_NAME + "ON" ( + ScraperTables . MOVIE_TABLE_NAME + "." + ScraperStore . Movie . ID + "=" + ScraperTables . PLAYS_MOVIE_VIEW_NAME + "." + ScraperStore . Película . Actor . MOVIE + ")" + "LEFT JOIN" + ScraperTables . PRODUCES_MOVIE_VIEW_NAME + "
ScraperTables . MOVIE_TABLE_NAME + "." + ScraperStore . Película . ID + "=" + ScraperTables . PRODUCES_MOVIE_VIEW_NAME + "." + ScraperStore . Película . Studio . MOVIE + ")" + "LEFT JOIN" + ScraperTables . BELONGS_MOVIE_VIEW_NAME + "ON (" + ScraperTables . MOVIE_TABLE_NAME + "."
Película . ID + "=" + ScraperTables . BELONGS_MOVIE_VIEW_NAME + "." + ScraperStore . Película . Género . MOVIE + ")" ); }
SQLiteStatement.
@Test public void
executeInsertWithArgsThrowsAndDoesNotTrigger() {
SQLiteStatement statement = real.compileStatement("INSERT INTO " + TABLE_EMPLOYEE + " ("
+ NAME + ", " + USERNAME + ") VALUES (?, ?)");
statement.bindString(1, "Alice
Aliison");
statement.bindString(2, "alice");
db.createQuery(TABLE_EMPLOYEE,
SELECT_EMPLOYEES)
.skip(1) // Skip initial
.subscribe(o);
try {
db.executeInsert(TABLE_EMPLOYEE, statement);
fail();
} catch (SQLException ignored) {
}
o.assertNoMoreEvents();
}
2.
Resumen
Android
con conexión a Base de Datos SQLite
§ Definición
Sqlite es
una base de datos opensource compatible con funciones relacionales, sql,
transacciones, declaraciones preparadas, tipos TEXT, INTEGER, Real, y sobre
todo ideal para dispositivos móviles.
§ Clases
1.
SQLiteCursor
Una implementación de Cursor que expone
los resultados de una consulta en a SQLiteDatabase. SQLiteCursor no
está sincronizado internamente, por lo que el código que utiliza un SQLiteCursor
de varios subprocesos debe realizar su propia sincronización cuando usa el
SQLiteCursor.
2. SQLiteDatabase
Expone métodos para administrar una base de datos SQLite.
SQLiteDatabase tiene métodos para crear, eliminar, ejecutar
comandos SQL y realizar otras tareas comunes de administración de bases de
datos.
3.
SQLiteOpenHelper
Esta clase facilita a
las ContentProvider implementaciones diferir la apertura y
actualización de la base de datos hasta el primer uso, para evitar el bloqueo
del inicio de la aplicación con actualizaciones de base de datos de larga
ejecución.
4.
SQLiteQueryBuilder
Esta es una clase de conveniencia que ayuda a
generar consultas SQL para enviarlas a SQLiteDatabase objetos.
5.
SQLiteStatement.
Esta clase representa una declaración que se puede ejecutar en una base
de datos. La instrucción no puede devolver varias filas o columnas, pero se
admiten conjuntos de resultados de valor único (1 x 1).
3. Summary
ANDROID
WITH CONNECTION TO SQLITE DATABASE
§ Definition
Sqlite is an opensource database compatible with
relational functions, sql, transactions, prepared declarations, TEXT, INTEGER,
Real types, and especially ideal for mobile devices.
§ Classes
1)
SQLiteCursor
A Cursor implementation that exposes the results of
a query in SQLiteDatabase. SQLiteCursor is not internally synchronized, so the
code used by a multithreaded SQLiteCursor must perform its own synchronization
when using the SQLiteCursor.
2)
SQLiteDatabase
It exposes methods to manage an SQLite database.
SQLiteDatabase has methods to create, delete,
execute SQL commands and perform other common database administration tasks.
3)
SQLiteOpenHelper
This class makes it easier for ContentProvider
implementations to defer the opening and updating of the database until the
first use, to avoid blocking the start of the application with long-running
database updates.
4)
SQLiteQueryBuilder
This is a convenience class that helps generate SQL
queries to send to SQLiteDatabase objects.
5) SQLite Statement.
This class represents a declaration that can be
executed in a database. The statement can not return multiple rows or columns,
but single value result sets (1 x 1) are allowed.
4.
Recomendaciones
·
Recomendamos poder tener acceso desde nuestra
aplicación al fichero de base de datos éste debe encontrarse en una carpeta
dentro de nuestro proyecto llamada ‘assets’. Si ya está creada, copiamos el
fichero de base de datos ahí, si no, tendremos que crear la carpeta antes.
·
El manejo de la base de
datos se hará utilizando una clase personalizada que extenderá la clase SQLiteOpenHelper,
en la cual podremos incluir todos los métodos relacionados con la base de datos
para insertar, actualizar y borrar datos.
5.
Conclusiones
Es
una colección de datos o información usados para dar servicios a muchas
aplicaciones al mismo tiempo. Que las bases de datos forman el nucleó de las
principales aplicaciones, sitio web y servicios corporativos. Que una base de
datos conlleva la existencia de tres tipos de usuarios que son el diseño el
cual administra los datos desarrolladores, implementa las transacciones e
interfaces. Usuarios finales los cuales consultan y editan los datos
6.
Apreciación del Equipo
Es
un motor de base de datos relacional de código abierto y muy potente, eso hace
que actualmente sea muy usado por los desarrolladores. Sus principales
características son que precisa de poca configuración, no necesita ningún
servidor ya que directamente lee y escribe en archivos de disco normales, ocupa
muy poco tamaño en el almacenamiento y aparte es multiplataforma. Android ofrece de serie soporte total para la
creación y administración de base de datos SQLite a través del paquete
"android.database.sqlite". Solo tendremos que definir las sentencias
SQL para crear y gestionar la base de datos.
7.
Glosario de Términos
Android
Studio: Es un entorno de desarrollo integrado (IDE), basado en
IntelliJ IDEA de la compañía JetBrains, que proporciona varias mejoras con
respecto al plugin ADT (Android Developer Tools) para Eclipse.
SDK:
(siglas en inglés de software development kit) es generalmente un conjunto de
herramientas de desarrollo de software que le permite al programador o
desarrollador de software crear aplicaciones para un sistema concreto.
Query:
String
o, en español, cadena de consulta es un término informático que se utiliza para
hacer referencia a una interacción con una base de datos
SQLite:
Es
una biblioteca escrita en leguaje C que implementa un Sistema de gestión de
bases de datos transaccionales SQL auto-contenido, sin servidor y sin configuración.
Base
de datos: Es una colección de información organizada de forma que un
programa de ordenador.
8.
Bibliografía o Linkografía
Comentarios
Publicar un comentario