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
public class SQLiteCursor 
extends AbstractWindowedCursor 
   

   


   
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.

public SQLiteCursor ( SQLiteCursorDriver driver,
                 String editTable,
                 SQLiteQuery query)
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 deFROMadelante 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
public final class SQLiteDatabase 
extends SQLiteClosable 
   

   
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
public abstract class SQLiteOpenHelper 
extends Object 
   
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
public class SQLiteQueryBuilder 
extends Object 
   
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.
6.    public final class SQLiteStatement 
extends SQLiteProgram 
   

   


   
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);
}
@Override
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

Entradas populares de este blog

Android Studio