Documente Academic
Documente Profesional
Documente Cultură
Objetivo
Desarrollar un conjunto de aplicaciones que permitan describir el funcionamiento del
almacenamiento de informacin en SQLite haciendo uso de Android.
Introduccin
SECCIN 1
En los siguientes puntos de esta prctica, se van a tratar de describir las distintas opciones de
acceso a datos que proporciona la plataforma y en cmo se pueden realizar las tareas ms
habituales dentro de este apartado.
La plataforma Android proporciona dos herramientas principales para el almacenamiento y
consulta de datos estructurados:
android.content.Context;
android.database.sqlite.SQLiteDatabase;
android.database.sqlite.SQLiteDatabase.CursorFactory;
android.database.sqlite.SQLiteOpenHelper;
Lo primero que se hace es definir una variable llamado sqlCreate donde se almacena la
sentencia SQL para crear una tabla llamada Usuarios con los campos
alfanumricos nombre e email. Para ms informacin sobre SQLite se puede consultar
la documentacin oficial.
El
mtodo onCreate() ser
ejecutado
automticamente
por
la
clase UsuariosDBHelper cuando sea necesaria la creacin de la base de datos, es
decir, cuando an no exista. Las tareas tpicas que deben hacerse en este mtodo sern
la creacin de todas las tablas necesarias y la insercin de los datos iniciales si son
Si la base de datos ya existe y su versin actual coincide con la solicitada simplemente se realizar
la conexin con ella.
Si la base de datos existe pero su versin actual es anterior a la solicitada, se llamar
automticamente al mtodo onUpgrade() para convertir la base de datos a la nueva versin y se
conectar con la base de datos convertida.
Si la base de datos no existe, se llamar automticamente al mtodo onCreate() para crearla y se
conectar con la base de datos creada.
Una vez que se tiene una referencia al objeto UsuariosSQLiteHelper, se llamar a su mtodo
getReadableDatabase() o getWritableDatabase() para obtener una referencia a la base de datos,
En primer lugar se ver dnde se ha creado la base de datos. Todas las bases de datos SQLite
creadas por aplicaciones Android utilizando este mtodo se almacenan en la memoria del telfono
en un archivo con el mismo nombre de la base de datos situado en una ruta que sigue el siguiente
patrn:
/data/data/paquete.java.de.la.aplicacion/databases/nombre_base_datos
En el caso de este ejemplo, la base de datos se almacenara por tanto en la ruta siguiente:
/data/data/net.sgoliver.android.bd/databases/DBUsuarios
Para comprobar esto se puede hacer lo siguiente. Una vez ejecutada por primera vez desde Eclipse
la aplicacin de ejemplo sobre el emulador de Android (y por supuesto antes de cerrarlo) se puede
i a la pe spe tiva DDM DalvikDebug Monitor Server de E lipse y e la solapa File Explorer se
puede acceder al sistema de archivos del emulador, donde se puede buscar la ruta indicada de la
base de datos. Se puede ver esto en la siguiente imagen:
Con esto ya se comprobar al menos que el archivo de la base de datos se ha creado en la ruta
correcta. Ya slo queda comprobar que tanto las tablas creadas como los datos insertados
tambin se han incluido correctamente en la base de datos. Para ello se puede recurrir a dos
posibles mtodos:
1. Trasnferir la base de datos a la PC y consultarla con cualquier administrador de bases de datos
SQLite.
2. Acceder directamente a la consola de comandos del emulador de Android y utilizar los comandos
existentes para acceder y consultar la base de datos SQLite.
El primero de los mtodos es sencillo. El archivo de la base de datos puede ser transferido a la PC
utilizando el botn de descarga situado en la esquina superior derecha del explorador de archivos
(remarcado en rojo en la imagen anterior). Junto a este botn aparecen otros dos para hacer la
operacin contraria (copiar un archivo local al sistema de archivos del emulador) y para eliminar
archivos del emulador. Una vez descargado el archivo a nuestro sistema local, se puede utilizar
Con esto ya se ha comprobado que la base de datos se ha creado correctamente, que se han
insertado todos los registros de ejemplo y que todo funciona segn se espera.
SECCIN 2
En la seccin anterior se vio cmo crear una base de datos para utilizarla desde la aplicacin
Android. En este segundo artculo de la serie se van a describir las posibles alternativas que
proporciona la API de Android a la hora de insertar, actualizar y eliminar registros de la base de
datos SQLite.
La API de SQLite de Android proporciona dos alternativas para realizar operaciones sobre la base
de datos que devuelven resultados (entre ellas la insercin/actualizacin/eliminacin de registros,
pero tambin la creacin de tablas, de ndices, etc).
El primero de ellos, es el mtodo execSQL() de la clase SQLiteDatabase. Este mtodo permite
ejecutar cualquier sentencia SQL sobre la base de datos, siempre que sta no devuelva resultados.
Para ello, simplemente se aportar como parmetro de entrada de este mtodo la cadena de
texto correspondiente con la sentencia SQL. Cuando se crea la base de datos en la parte anterior
ya se vio algn ejemplo de esto para insertar los registros de prueba. Otros ejemplos podran ser
los siguientes:
//Insertar un registro
db.execSQL("INSERT INTO Usuarios (codigo,nombre) VALUES (6,'usuariopru') ");
//Eliminar un registro
db.execSQL("DELETE FROM Usuarios WHERE codigo=6 ");
//Actualizar un registro
db.execSQL("UPDATE Usuarios SET nombre='usunuevo' WHERE codigo=6 ");
Los mtodos update() y delete() se utilizarn de forma muy parecida a sta, con la salvedad de que
recibirn un parmetro adicional con la condicin WHERE de la sentencia SQL. Por ejemplo, para
actualizar el nombre del usuario con un cdigo determinado se har lo siguiente:
//Establecemos los campos-valores a actualizar
ContentValues valores = new ContentValues();
valores.put("nombre","usunuevo");
//Actualizamos el registro en la base de datos
db.update("Usuarios", valores, "codigo=6", null);
Como se puede ver, como tercer parmetro del mtodo update() se pasa directamente la
condicin del UPDATE tal como se hara en la clusula WHERE en una sentencia SQL normal.
El mtodo delete() se utilizara de forma anloga. Por ejemplo para eliminar el registro del usuario
con cdigo determinado se hara lo siguiente:
//Eliminamos el registro del usuario '6'
db.delete("Usuarios", "codigo=6", null);
Como se ve, se vuelve a pasar como primer parmetro el nombre de la tabla y en segundo lugar la
condicin WHERE. Por supuesto, si no se necesita ninguna condicin, se podra dejar como null en
este parmetro (lo que eliminara todos los registros de la tabla).
Un ltimo detalle sobre estos mtodos. Tanto en el caso de execSQL() como en los casos de
update() o delete() se pueden utilizar argumentos dentro de las condiciones de la sentencia SQL.
stos no son ms que partes variables de la sentencia SQL que se aportarn en un array de valores
aparte, con lo que se evitar pasar por la situacin tpica en la que se tiene que construir una
sentencia SQL concatenando cadenas de texto y variables para formar el comando SQL final. Estos
argumentos SQL se indica o el s olo ?, y los valores de dichos argumentos deben pasarse
en el array en el mismo orden que aparecen en la sentencia SQL. As, por ejemplo, se pueden
escribir instrucciones como la siguiente:
//Eliminar un registro con execSQL(), utilizando argumentos
String[] args = newString[]{"usuario1"};
db.execSQL("DELETE FROM Usuarios WHERE nombre=?", args);
//Actualizar dos registros con update(), utilizando argumentos
ContentValues valores = newContentValues();
valores.put("nombre","usunuevo");
Esta forma de pasar a la sentencia SQL determinados datos variables puede ayudar adems a
escribir cdigo ms limpio y evitar posibles errores.
En esta parte se ha continuado con la aplicacin de ejemplo del apartado anterior, a la que he
aadido dos cuadros de texto para poder introducir el cdigo y nombre de un usuario y tres
botones para insertar, actualizar o eliminar dicha informacin.
SECCIN 3
En la parte anterior se vieron todas las opciones disponibles a la hora de insertar, actualizar y
eliminar datos de una base de datos SQLite en Android. En esta seccin se van a describir la ltima
de las tareas importantes de tratamiento de datos que quedan por ver, la seleccin y recuperacin
de datos.
De forma anloga a lo que se vio para las sentencias de modificacin de datos, se van a tener dos
opciones principales para recuperar registros de una base de datos SQLite en Android. La primera
de ellas utilizando directamente un comando de seleccin SQL, y como segunda opcin utilizando
un mtodo especfico donde se parametriza la consulta a la base de datos.
Para la primera opcin se utilizar el mtodo rawQuery() de la clase SQLiteDatabase. Este mtodo
recibe directamente como parmetro un comando SQL completo, donde indicamos los campos a
recuperar y los criterios de seleccin. El resultado de la consulta se obtendr en forma de cursor,
que posteriormente se podr recorrer para procesar los registros recuperados. Sirva la siguiente
consulta a modo de ejemplo:
Cursor c = db.rawQuery(" SELECT codigo,nombre FROM Usuarios WHERE nombre='usu1' ", null);
Como en el caso de los mtodos de modificacin de datos, tambin se puede aadir a este
mtodo una lista de argumentos variables que se hayan indicado en el comando SQL con el
s olo ?, po eje plo as:
String[] args = newString[] {"usu1"};
Cursor c = db.rawQuery(" SELECT codigo,nombre FROM Usuarios WHERE nombre=? ", args);
Ms adelante en esta seccin se vera cmo se puede manipular el objeto Cursor para recuperar
los datos obtenidos.
Como segunda opcin para recuperar datos se puede utilizar el mtodo query() de la clase
SQLiteDatabase. Este mtodo recibe varios parmetros: el nombre de la tabla, un array con los
nombre de campos a recuperar, la clusula WHERE, un array con los argumentos variables
incluidos en el WHERE (si los hay, null en caso contrario), la clusula GROUP BY si existe, la
clusula HAVING si existe, y por ltimo la clusula ORDER BY si existe. Opcionalmente, se puede
incluir un parmetro al final ms indicando el nmero mximo de registros que se quiera que
devuelva la consulta. Vase el ejemplo anterior utilizando el mtodo query():
String[] campos = newString[] {"codigo", "nombre"};
String[] args = newString[] {"usu1"};
Cursor c = db.query("Usuarios", campos, "usuario=?", args, null, null, null);
Como se observa, los resultados se devuelven nuevamente en un objeto Cursor que se debern
recorrer para procesar los datos obtenidos.
Para recorrer y manipular el cursor devuelto por cualquiera de los dos mtodos mencionados se
tienen a disposicin varios mtodos de la clase Cursor, entre los que destacan dos de los
dedicados a recorrer el cursor de forma secuencial y en orden natural:
Adems de los mtodos comentados de la clase Cursor existen muchos ms que nos pueden ser
tiles en muchas ocasiones. Por ejemplo, getCount() indicar el nmero total de registros
devueltos en el cursor, getColumnName(i) devuelve el nombre de la columna con ndice i,
moveToPosition(i) mueve el apuntador del cursor al registro con ndice i, etc. Se puede consultar la
lista completa de mtodos disponibles en la clase Cursor en la documentacin oficial de Android.
En este parte se ha seguido ampliando la aplicacin de ejemplo anterior para aadir la posibilidad
de recuperar todos los registros de la tabla Usuarios pulsando un nuevo botn de consulta.
Con esto, se terminan la serie de artculos bsicos dedicados a las tareas de mantenimiento de
datos en aplicaciones Android mediante bases de datos SQLite.
EJEMPLO 2
Toast.makeText(getBaseContext(), "SE PROCEDE A ALMACENAR LOS DATOS " + nombre + " "+ email,
Toast.LENGTH_SHORT).show();
database.abrir();
long id=database.insertarContacto(nombre, email);
database.cerrar();
Toast.makeText(getBaseContext(), "SE HAN ALMACENADO LOS DATOS", Toast.LENGTH_SHORT).show();
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
El archivo Activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<TextView
android:id="@+ id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="20dp"
android:text="@string/hello_world"
tools:context=".MainActivity" />
<EditText
android:id="@+ id/name"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+ id/textView1"
android:layout_marginTop="31dp"
android:ems="10" >
<requestFocus />
</EditText>
<TextView
android:id="@+ id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+ id/textView1"
android:text="Nombre del usuario" />
<EditText
android:id="@+ id/email"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+ id/name"
android:layout_marginTop="46dp"
android:ems="10" />
<TextView
android:id="@+ id/textView3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+ id/name"
android:layout_marginTop="14dp"
android:text="Correo Electrnico" />
<Button
android:id="@+ id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_below="@+ id/email"
android:layout_marginTop="24dp"
android:text="GRABAR" />
</RelativeLayout>
El archivo manifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.cic.example.androidbd"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="18" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.cic.example.androidbd.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
Para este caso se har uso del componente de diseo grfico. Dentro de ella es posible observar
muchas propiedades referentes a la interfaz grfica.
Se procede a reemplazar el ttulo que aparece por omisin al crear la aplicacin, para ello se
selecciona el ttulo correspondiente y se busca dentro de las propiedades del mismo la opcin de
Text, la cual permite modificar el contenido o bien agregar una nueva variable al archivo
Strings.xml. Dicha opcin ya se encuentra direccionada a la varible de XML hello_world, en este
caso, se proceder a crear una nueva variable para este componente, seleccionado el botn de
New String.
Lo anterior permite agregar esa cadena al archivo Strings.xml, se procede a hacer ms grande el
texto 20sp(medida tipo pixel con cierta proporcin). Para poder centrar el componente se
selecciona la opcin de Gravity.
Se proceder a agregar una etiqueta (TextView) y un componente para permitir que se introduzca
el texto (AutoCompleteTextView).
Se elimina el contenido del texto del TextView, en la opcin Text. Se procede a asignar el texto de
Ttulo al TextView creado. Para poder obtenerla se resumen en la siguiente tabla las variables que
se recomienda que la aplicacin debe de tener:
COMPONENTE
TextView(1)
TextView(2)
TextView(3)
AutoCompleteTextView(1, 2 y 3)
COMPONENTE
Button 1
Button 2
Text
CANCELAR
AGREAGR
Text
Ttulo
Autor
ISBN
Nombre
variable
cancel
add
Nombre variable
title
author
isbn
Text size
20sp
20sp
20sp
Text size
Text style
On Click
20dp
20dp
bold
bold
onAddClick
onCancelClick
Text style
bold
bold
bold
Id
Padding
5sp
5sp
5sp
width
130
130
Se procede a agregar 2 botones a la aplicacin, los cuales sern usados sin identificadores, puesto
que se har uso de un mtodo para verificar su funcionamiento. El cdigo final de esta Activity de
acuerdo al formato de XML es de la forma:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:text="@string/AddNewBook"
android:textSize="20sp" />
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/textView2"
android:layout_below="@+id/textView2"
android:layout_marginTop="15dp"
android:text="@string/title"
android:textSize="20sp"
android:textStyle="bold" />
<AutoCompleteTextView
android:id="@+id/BookTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/textView1"
android:layout_alignBottom="@+id/textView1"
android:layout_alignParentRight="true"
android:ems="10" >
<requestFocus />
</AutoCompleteTextView>
<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/button1"
android:layout_alignBottom="@+id/button1"
android:layout_toRightOf="@+id/button1"
android:onClick="onAddClick"
android:padding="5dp"
android:text="@string/add"
android:textSize="20sp"
android:textStyle="bold"
android:width="130dp" />
<AutoCompleteTextView
android:id="@+id/BookAuthor"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/BookTitle"
android:layout_marginTop="54dp"
android:layout_toRightOf="@+id/textView1"
android:ems="10" />
<AutoCompleteTextView
android:id="@+id/BookISBN"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_toRightOf="@+id/textView1"
android:ems="10" />
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/textView4"
android:layout_below="@+id/BookISBN"
android:layout_marginLeft="22dp"
android:layout_marginTop="55dp"
android:onClick="onCancelClick"
android:padding="5dp"
android:text="@string/cancel"
android:textSize="20sp"
android:textStyle="bold"
android:width="130dp" />
<TextView
android:id="@+id/textView4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@+id/button1"
android:layout_alignLeft="@+id/textView3"
android:padding="5dp"
android:text="@string/isbn"
android:textSize="20sp"
android:textStyle="bold" />
<TextView
android:id="@+id/textView3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/BookAuthor"
android:layout_alignParentLeft="true"
android:padding="5dp"
android:text="@string/author"
android:textSize="20sp"
android:textStyle="bold" />
</RelativeLayout>
El cdigo de esta nueva Activity se muestra a continuacin, no olvidar agregar dos lneas en el
archivo Strings.xml a las que hace alusin el cdigo de esta nueva Activity.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textStyle="bold"
android:focusableInTouchMode="false"
android:textSize="25sp"
android:padding="10sp"
android:gravity="center"
android:text="@string/result"/>
<TextView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:textStyle="bold"
android:focusableInTouchMode="false"
android:textSize="20sp"
android:padding="10sp"
android:gravity="center"
android:text=""
android:id="@+id/resultadoText"
/>
</LinearLayout>
name="app_name">BDLibros</string>
name="action_settings">Settings</string>
name="hello_world">Hello world!</string>
name="AddNewBook">AGREGAR UN NUEVO LIBRO</string>
name="title">TTULO</string>
name="author">AUTOR</string>
name="isbn">ISBN</string>
name="cancel">CANCELAR</string>
name="add">AGREGAR</string>
<string name="result">RESULTADO</string>
<string name="resultadoOk">INSERCIN EXITOSA DEL LIBRO</string>
<string name="cancelOp">OPERACIN CANCELADA</string>
</resources>
Para poder relacionar las Activities se tiene que agregar una entrada del tipo Intent en el archivo
AndroidManifest.xml.
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.cic.example.bdlibros.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".Result"
android:label="@string/result">
</activity>
</application>
</manifest>
android.os.Bundle;
android.app.Activity;
android.content.ComponentName;
android.content.Intent;
android.view.Menu;
android.view.View;
android.widget.AutoCompleteTextView;
Button)
bookTitle = (AutoCompleteTextView) findViewById
bookAuthor = (AutoCompleteTextView) findViewById
bookISBN = (AutoCompleteTextView) findViewById (R.id.BookISBN);
El mtodo onUpgrade sirve cuando se requieran tener nuevas actualizaciones de la base de datos
por medio del software, quedando la base de datos anterior sin usar. Si se arranca una versin del
programa con una nueva versin de la base de datos, ltimo parmetro en la llamada al mtodo
super de la clase heredada de SQLiteHelper, se ejecuta este mtodo.
Ahora se unificarn los cdigos de la gestin de la base de datos con el cdigo antes creado sobre
la aplicacin de libros.
package com.cic.example.bdlibros;
import
import
import
import
android.content.Context;
android.database.sqlite.SQLiteDatabase;
android.database.sqlite.SQLiteDatabase.CursorFactory;
android.database.sqlite.SQLiteOpenHelper;
extends SQLiteOpenHelper
DATABASE_NAME ="library.db";
TITLE="title";
AUTHOR="author";
ISBN="isbn";
package com.cic.example.bdlibros;
import
import
import
import
android.app.Activity;
android.content.ContentValues;
android.database.sqlite.SQLiteDatabase;
android.os.Bundle;
import android.widget.TextView;
public class Result extends Activity
{
@Override
public void onCreate(Bundle savedInstance)
{
super.onCreate (savedInstance);
setContentView (R.layout.results);
TextView resultText = (TextView) findViewById(R.id.resultadoText);
Bundle bundle = getIntent().getExtras();
if (bundle.getString("CANCEL") != null)
{
resultText.setText (getString(R.string.cancelOp));
}
else
{
String bookTitle = bundle.getString ("BookTitle");
String bookAuthor=bundle.getString ("BookAuthor");
String bookISBN = bundle.getString ("BookISBN");
insertBook(bookTitle,bookAuthor,bookISBN);
resultText.setText (getString (R.string.resultadoOk)+ " " + bookTitle+ " " +
bookAuthor+ " " +bookISBN);
}
}
private void insertBook (String title, String author, String isbn)
{
DatabaseHelper databaseHelper = new DatabaseHelper(this,
DatabaseHelper.DATABASE_NAME, null, 1);
SQLiteDatabase db =databaseHelper.getWritableDatabase();
ContentValues cv=new ContentValues();
cv.put (DatabaseHelper.TITLE,title);
cv.put (DatabaseHelper.AUTHOR,title);
cv.put (DatabaseHelper.ISBN,title);
db.insert ("books",DatabaseHelper.TITLE,cv);
db.close();
}
}
Tras lo anterior se puede ejecutar el programa, llenar los datos y verificar si se ha almacenado la
informacin en el repositorio correspondiente. La siguiente grfica muestra la ejecucin del
programa.
Ahora se verifica a travs de la vista del DDMS incorporado en Eclipse la informacin almacenada
en el sistema de archivos correspondiente.
Este archivo puede ser llevado al sistema del host donde se encuentra ejecutando el emulador o
bien puede entrar al modo de consola del sistema para poder hacer uso de la consola de acceso a
Linux para poder visualizar su contenido.