×
×

Error de autenticación

Ha habido un problema a la hora de conectarse a la red social. Por favor intentalo de nuevo

Si el problema persiste, nos lo puedes decir AQUÍ

×

www.androidblog.esMiembro desde: 29/11/12

www.androidblog.es

http://www.androidblog.es

0
Posición en el Ranking
0
Usuarios seguidores
Sus noticias
RSS
  • Visitas
    484.992
  • Publicadas
    395
  • Puntos
    0
Veces compartidas
105
¡Consigue las insignias!
Trimestrales
Recientes
Visitas a noticias
16/01/2013

image

En el Anterior post sobre programación en Android veíamos como crear un menú en Android, y para ir viendo el proceso habíamos creado una aplicación que muestra una con una serie de tipos de cervezas, ahora le toca el turno a la creación de esta lista. Pero como de algún sitio tenemos que recuperar los datos, nos vamos a apoyar en la persistencia, y así además aprovechamos y hechamos un vistazo a SQLite en Android.

Vamos a comenzar con SQLite en esta primera parte para luego poder usarla en la creación de la lista en la segunda.

SQLite es un motor de bases de datos muy popular en la actualidad gracias en parte al uso de dispositivos portátiles, que utiliza como su nombre indica lenguaje SQL y sus principales ventajas son:

  • Reducido Tamaño
  • Server Less, No necesita servidor puede ser usada de forma local en un dispositivo y no es necesario un servidor del tipo de Apache por ejemplo
  • Permite transacciones
  • Es código libre

Android facilita una completa Api para el manejo de esta base de datos y poder así gestionar la información de tu aplicación y el primer paso para ello radica en el uso de la clase auxiliar SQliteOpenHelper, la cual hay que extender y personalizar según las necesidades que se requieran. Cuenta con un constructor y dos métodos que debes sobrescribir en tu clase personalizada, estos métodos son : onCreate() y onUpdate().

Por lo que creamos una clase en nuestro proyecto que extienda de la clase citada y sobrescriba dichos métodos (Cuando crees la clase eclipse te mandará un aviso pidiéndote que los utilices), para la aplicación de ejemplo quedaría así:

public class SQliteHandler extends SQLiteOpenHelper{
  public SQliteHandler(Context context, String name, CursorFactory factory, 
			int version) {}
  @Override
  public void onCreate(SQLiteDatabase db) {}

  @Override
  public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {}

}

Vamos a pasar a explicar dichos méotdos:

onCreate: Lanzado cuando la base de datos es creada, y ¿cuando se crea?, pues cuando instancias por primera vez la clase que has creado ahora mismo y no existe la base de datos, en ese momento es donde se debe crear la estructura de tablas, es Android el que gestiona la creación del archivo y su localización por defecto. El método proporciona un objeto SQLiteDatabase sobre el que se ejecutan las sentencias.

onUpgrade:Lanzado cuando se debe actualizar la base de datos, y ¿cuando se actualiza? pues cuando instancias por primera vez la clase existe un parámetro de tipo int llamado version, que es el que define la versión en que será creada la base de datos. Si instancias la clase por primera vez pasando la versión 1 y mas tarde con otra versión este método será lanzado al no existir la versión de esta base de datos. Aquí es donde procede realizar cambios por ejemplo al actualizar la aplicación y quieres añadir una nueva tabla, pues el método onCreate no será llamado a no ser que la base de datos sea destruida borrando los datos de la aplicación. Una buena práctica para la gestión de las versiones es definir una constante en tu clase personalizada que defina la versión actual y así no tener que ir revisando las instancias una a una

  public static int DBVERSION = 1;

Ahora vamos a rellenar los métodos con contenido:

public void onCreate(SQLiteDatabase db) {
  String sql = "CREATE TABLE beers( _id INTEGER PRIMARY KEY AUTOINCREMENT, nombre text, descripcion TEXT, tipo TEXT)";
  db.execSQL(sql);
  sql = "INSERT INTO beers(nombre, descripcion, tipo) VALUES('Weizenbier', 'Cerveza elaborada con la levadura de la cerveza en muy altas temperaturas', 'Cerveza de Trigo')";
  db.execSQL(sql);
  sql = "INSERT INTO beers(nombre, descripcion, tipo) VALUES('Burton ale', 'Cervezas elaboradas en Staffordshire, Inglaterra', ' Ale')";
  db.execSQL(sql);
  sql = "INSERT INTO beers(nombre, descripcion, tipo) VALUES('Dopplebock', 'Cerveza alemana extrafuerte de fermentación baja y color oscuro', ' Lager')";
  db.execSQL(sql);
}

En el método onCreate creamos una tabla por el momento que es la que almacenará las cervezas y cuenta con 4 campos. Si en el futuro necesitamos más las crearemos. Se han introducido 4 cervezas de muestra por el momento Las consultas son lanzadas mediante el objeto db que representa al archivo de la base de datos.

Ahora que ya tenemos la clase vamos a realizar un ejemplo de como se usa en tu aplicación y en la próxima parte el ejemplo práctico de como usarlo en nuestra aplicación de cervezas. Por ejemplo si quisiéramos usarla en nuestra app, procederíamos de esta forma:

  SQliteHandler sqlite = new SQliteHandler(getApplicationContext(), "spokenapps", null, 
  SQliteHandler.DB_VERSION);
  SQLiteDatabase db = sqlite.getWritableDatabase();// o sqlite.getReadableDatabase();
  1. Instanciamos la clase con los parámetros con Context, ‘Nombre de Tabla’, CursorFactory(que normalmente es null) y versión de la base de datos
  2. Obtenemos una base de datos en formato de escritúra (‘INSERT, DELETE, UPDATE) o escritura (SELECT)

Y ahora en primer lugar vamos a ver como se consulta la misma:

SQliteHandler sqlite = new SQliteHandler(this, "birras", null, SQliteHandler.DBVERSION);
SQLiteDatabase db = sqlite.getReadableDatabase();
String[] columns = new String[]{"name", "description", "type"};

        Cursor c;
// Los campos de esta funcion son los siguientes  
  // db.query(tableName, columns, selection, selectionArgs, groupBy, having, orderBy, limit)     
  c = db.query("beers", columns, "_id = 1", null, null, null, null, null); c.moveToFirst(); while(!c.isAfterLast()){ Log.d("debug", "Beer==> Name:"+c.getString(0)+" Description:"+c.getString(1)+" Type:"+c.getString(2)); c.moveToNext(); } c.close(); db.close();
  1. Instanciamos la clase como hemos visto antes
  2. Creamos un String[] con los nombres de las columnas de la tabla que queremos recuperar
  3. Creamos un objeto de la clase Cursor y recibimos el cursor que devuelve la función query del objeto db. La función query tiene variaciones diferentes, puedes usar el que más te convenga. y tiene un campo donde especificas la clausula WHERE sin incluir esa misma palabra ( selection ), se puede utilizar la sintaxis con ‘ ? ‘ para evitar inyecciones y escapar caracteres.
  4. Solo queda recorrer el cursor y hacer lo que se quiera con los valores que se obtienen por orden y dependiendo del tipo que tengan se usa un método u otro, en este caso como son cadenas de texto c.getString( num )

Y Ahora si quieres realizar un insert o update se utiliza una sintaxis similar

        SQliteHandler sqlite = new SQliteHandler(this, "birras", null, SQliteHandler.DBVERSION);
        SQLiteDatabase db = sqlite.getWritableDatabase();
        ContentValues values = new ContentValues();
        values.put("Name", "Cerveza Nueva");
        values.put("Description", "Is a new Beer");
        values.put("Type", "Black Beer");

        db.insert("beers", null, values);

Es similar a la anterior pero aquí se hace uso de un objeto ContentValues. Es un objeto donde se almacenan los valores que quieres insertar o actualizar. Mediante el método put estableces los valores, en nuestro caso el primer valor que corresponde al nombre del campo donde va cada valor, el campo _id como hemos dicho que es auto numérico no hace falta insertarlo. Para actualizar se utiliza db.update() en el que además hay que especificar los registros que se actualizarán mediante la clausula WHERE. El objeto ContentValues determinará en este caso que nuevos valores tomarán las columnas de los registros que quieras coincidan con la clausula WHERE. No es necesário especificar todos los campos, si solo quisieras cambiar el nombre de una cerveza por ejemplo solo tendrías que incluir values.put(‘Name’, ‘Nuevo Nombre’).

Y un delete es más simple :

   String[] whereArgs = new String[]{"1", "Cerveza1"};
   db.delete(table, "_id = ? and Name = ?", whereArgs );

Se elige el nombre de la tabla en el primer campo, las condiciones en el segunda campo y los valores en el tercero. En este caso significa que borre los registros cuyo campo ‘_id’ sea igual 1. Esta forma de especificar la clausula where se puede utilizar para las acciones anteriores menos para el intert que no incluye clausula where. El carácter ‘ ? ‘ se substituye por los valores del String[] en el orden en el que aparezcan, por lo que sería que el campo _id = 1 y el campo Name = ‘Cerveza1″

En el siguiente tutorial seguimos con la lista ayudándonos en la base de datos pero por ahora aquí tenemos la clase al completo hasta el momento:

e>

Más recientes de www.androidblog.es

Zombie Attack: Apocalipsis

Zombie Attack: Apocalipsis es un juego de defensa, donde debemos defender nuestra base de los zombies.Para defendernos de los zombies disponemos de distintas armas, desde las mas convencionales como la pistola o la escopeta hasta las más temibles, como el lanzallamas 08/07/2014

El teclado de Android L llega a la Google Play

Aunque Android L todavía no está disponible para nuestros dispositivos, su famoso teclado ha llegado a la Google Play y ya está listo para su descarga 29/06/2014

La nueva app de la Wikipedia ya es operativa

La nueva app de la Wikipedia ya es operativa

La Wikipedia no es una enciclopedia cualquiera, la velocidad con la que se actualizan sus contenidos y su característica forma de condensar la información la convierten en una inagotable fuente de conocimiento y consulta 23/06/2014

La app de YouTube para Android permite 1080p

La app de YouTube para Android permite 1080p

La última actualización de la aplicación oficial de YouTube para Android permite ver vídeos con calidad Full HD, una opción que venían demandando muchos usuarios 16/06/2014

Sherpa Next, alcanza el siguiente nivel

Sherpa Next, alcanza el siguiente nivel

Tal y como prometieron desde Sherpa, ya está disponible en la Google Play Store la nueva versión del su conocido asistente virtual, que recibe el nombre de Sherpa Next 12/06/2014

Mostrando: 1-5 de 397