Sunteți pe pagina 1din 15

Manual Bsico para la Creacin de Bases de Datos con SQLite en Android OS

Juan Sebastin Snchez Gmez Ingeniera de Sistemas Universidad Manuela Beltrn Cuando hablamos de Dispositivo mviles, estamos acostumbrados a escuchar sobre los Smartphone, telfonos inteligente dominados por sistemas operativos como iOS, Windows Phone y Android. Este ltimo, Android, domina el mercado de los Smartphone, gracias a que la gran mayora de las aplicaciones de su Market (Google Play 1) se consiguen gratuitas, y en la web encontramos gran cantidad de herramientas para su desarrollo. Desde su lanzamiento en el ao 2000, SQLite 2 un ambicioso proyecto de dominio pblico, entindase por esto, un motor de base de datos de libre acceso, que no necesita de un servidor, y con la principal ventaja de poseer una librera portable de apenas (aprx. 275 Kb). Ahora bien, es posible integrar SQLite al sistema operativo mvil Android, gracias al paquete android.database.sqlite 3, el cual contiene las clases de bases de datos SQLite, utilizadas para la gestin de nuestra base de datos privada. Para hacer posible esta integracin, es necesario tener los conocimientos bsicos en POO (Programacin Orientada a Objetos) y en el lenguaje de programacin Java. Para el presente manual, haremos uso de software libre, el cual podemos descargar y utilizar gratuitamente todos sus componentes, como el IDE (Entorno de Desarrollo Integrado) de Eclipse ndigo 4, que consiste en un conjunto de herramientas de programacin en Java, que incluye un editor de cdigo, un compilador, un depurador y un constructor de interfaz grfica (GUI). De igual forma, necesitaremos la SDK (Kit de Desarrollo de Software) de Android para Windows 5, que es el conjunto de herramientas para el desarrollo de aplicaciones en Android OS, esto incluye las API (Interfaz de Programacin de Aplicaciones), entindanse como las diferentes versiones de Android (en nuestro caso la API 10 Android Gingerbread).

Procedimiento:
Creacin de un Proyecto Android en Eclipse: Antes que nada, debemos crear un Proyecto Android: Figura 1. File >> New >> Other

Figure 2. Android >> Android Project >> Next

Figure 3. Create Android Project

Figura 4. Damos un nombre al Proyecto >> Next

Figura 5. Seleccionamos la Target Android para la cual se va a desarrollar la app.

Figura 6. Por ltimo damos un nombre al paquete (Package Name) >> Finish

Despus de finalizar la creacin se aprecian las siguientes carpetas del proyecto Ejemplo1. Encontramos la carpeta Android 2.3.3 donde estn las libreras de la API 10, la carpeta src (source) donde estn contenidas las clases en el paquete, la carpetagen (Generated Java Files) donde estn los archivos creados por defecto (R.java, BuildConfig.java); la carpeta res, que contiene drawable (imgenes e iconos), layout (formularios xml) y values (variables String) y por ltimo en relevancia estn los archivos Android Manifest (el archivo manifiesto para permisos) y Project.properties, creado por defecto.

Desarrollo Interfaz Grafica de la Aplicacin

En primer lugar, vamos a disear la interfaz de nuestra aplicacin para el usuario final, para esto, debemos tener en cuenta: la presentacin, simplicidad y funcionalidad. Cuando hablamos de presentacin, tienen lugar los componentes visuales con los que el usuario interaccionar; simplicidad, consiste en el fcil acceso y control de estos componentes, y funcionalidad, es cumplir con las prestaciones y el perfil para el cual fue desarrollada nuestra aplicacin. Android, hace uso de formularios .xml, con los cuales diseamos la interfaz grfica de nuestra aplicacin, para esto vamos a crear el pantallazo principal. Por defecto, Eclipse crea un formulario principal al que nombre main.xml, para acceder a l, vamos al package explorer, en la parte izquierda, buscamos el proyecto Android que creamos Ejemplo1 como se muestra en la Fig. 7.

Ejemplo1 >> res >> layout >> main.xml

Figura 7. Diseo Interfaz main.xml

Figura

8.

Formulario

main.xml

Este es el pantallazo principal, es decir la primera impresin que tiene el usuario de la aplicacin. En ella, encontramos dos EditText, el primero de ellos donde se ingresa la cedula y el segundo para el nombre, acompaados de sus respectivos TextView (Cdula y Datos del estudiante). Adems de ello, se puede apreciar tres Button, el primero guarda los datos ingresados (Insertar), el segundo (Buscar) va a un segundo formulario para realizar una bsqueda o consulta en la base de datos, y el ltimo termina la aplicacin (Cerrar)

Cdigo Fuente main.xml


<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="@drawable/fondo" > <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/main_button_cerrar" android:layout_margin="40px" android:padding="5px" android:background="#99000000" android:layout_centerHorizontal="true" android:visibility="invisible" android:id="@+id/main_relativelayout_exito" >

<TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Insertado con xito!" android:id="@+id/main_textview_exito" android:textColor="#ffffff" /> </RelativeLayout> <Button android:layout_width="fill_parent" android:text="@string/cerrar" android:layout_height="wrap_content" android:textColor="#000000" android:id="@+id/main_button_cerrar" android:layout_below="@+id/main_button_buscar" android:layout_alignParentLeft="true" android:layout_marginTop="20dp"></Button> <EditText android:layout_width="fill_parent" android:id="@+id/main_edittext_nombre" android:layout_height="wrap_content" android:layout_below="@+id/main_textview_nombre" android:layout_alignParentLeft="true" android:layout_marginTop="24dp"> <requestFocus></requestFocus> </EditText> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/main_textview_nombre" android:text="@string/datos" android:textColor="#000000" android:layout_below="@+id/main_textview_cedula" android:layout_alignParentLeft="true" android:layout_marginTop="27dp"></TextView> <EditText android:id="@+id/main_edittext_cedula" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_alignLeft="@+id/main_relativelayout_exito" android:layout_marginTop="48dp" > </EditText> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/main_textview_cedula" android:text="@string/cedula" android:textColor="#000000" android:layout_alignBaseline="@+id/main_edittext_cedula" android:layout_alignBottom="@+id/main_edittext_cedula" android:layout_toLeftOf="@+id/main_relativelayout_exito"></TextView> <Button android:layout_width="wrap_content" android:text="@string/buscar" android:layout_height="wrap_content" android:textColor="#000000" android:id="@+id/main_button_buscar" android:layout_below="@+id/main_edittext_nombre" android:layout_toRightOf="@+id/main_button_insertar" android:layout_marginLeft="54dp" android:layout_marginTop="34dp"></Button> <Button android:layout_width="wrap_content" android:text="@string/insertar" android:layout_height="wrap_content" android:textColor="#000000" android:id="@+id/main_button_insertar" android:layout_alignBaseline="@+id/main_button_buscar" android:layout_alignBottom="@+id/main_button_buscar" android:layout_alignRight="@+id/main_textview_nombre" ></Button> </RelativeLayout>

Figura 9. Formulario bsqueda.xml Al hacer clic en el botn Buscar del formulario main.xml, iremos a este formulario, en el cual es posible hacer una Bsqueda o Consulta en la base de datos gestionada por SQLite. Podemos apreciar, un EditText, en el cual el usuario ingresara el criterio de bsqueda, ste acompaado de su respectivo TextView (Cdula) y un TextView como ttulo (Bsqueda). Tambin se tienen dos botones, el primero Buscar, que inicia la bsqueda y muestra los resultados, y el segundo Anterior que nos devuelve al formulario anterior main.xml. Por ltimo, encontramos un TextView, que nos muestra el resultado de la bsqueda.

Cdigo Fuente bsqueda.xml


<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/fondo" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/titulo2" android:id="@+id/busqueda_textview_titulo" android:textColor="#ffffff" android:layout_marginBottom="10px" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/busqueda_textview_titulo"

android:text="@string/cedula" android:id="@+id/busqueda_textview_nombre" android:textColor="#ffffff" android:layout_marginBottom="10px" /> <EditText android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_below="@+id/busqueda_textview_titulo" android:layout_toRightOf="@+id/busqueda_textview_nombre" android:id="@+id/busqueda_edittext_nombre" android:layout_marginBottom="10px" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/busqueda_button_buscar" android:layout_below="@+id/busqueda_edittext_nombre" android:text="@string/buscar" android:textColor="#000000" android:layout_marginLeft="60px" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/busqueda_button_anterior" android:layout_below="@+id/busqueda_edittext_nombre" android:layout_toRightOf="@+id/busqueda_button_buscar" android:text="@string/anterior" android:textColor="#000000" android:layout_marginLeft="20px" /> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_below="@+id/busqueda_button_anterior" android:layout_margin="40px" android:background="#99000000" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/busqueda_button_buscar" android:id="@+id/busqueda_textview_resultado" android:textColor="#ffffff" android:text="@string/texto"/> </RelativeLayout> </RelativeLayout>

Desarrollo de las Clases: Como bien sabemos, tenemos dos formularios main.xml y bsqueda.xml, pero los objetos que estn inmersos en ellos, no hacen nada hasta el momento, es por esto que es necesario empezar a programar los atributos y los mtodos a los que se asocian los formularios, para dar funcionalidad a nuestra aplicacin. Para ello, vamos a hacer uso de tres clases: Ejemplo1.java, BD.java, bsquedas.java. 1) Ejemplo1.java A esta clase est asociado el formulario principal main.xml, y desde este formulario se ingresan los datos que se quieren insertar en la Base de datos. Cdigo Fuente Ejemplo1. Java
package ejemplo1.Ejemplo1; //Se importan las libreras necesarias import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.view.Window; import android.widget.Button; import android.widget.EditText; import android.widget.RelativeLayout; import android.widget.TextView; import android.view.View.OnClickListener;

public class Ejemplo1 extends Activity { //Se declaran los objetos que se van a utilizar Button buscar; //Objeto buscar de tipo Button (Botn) Button cerrar; //Objeto cerrar de tipo Button (Botn) Button insertar;//Objeto insertar de tipo Button(Botn) BD datos; EditText nombre;//Objeto nombre de tipo EditText (Caja de Texto) EditText cedula;//Objeto cedula de tipo EditText (Caja de Texto) //Define un layout donde la ubicacion de un elemento en la pantalla depende de otro componente RelativeLayout exito; RelativeLayout notificacion; //Objeto alerta de tipo TextView notifica el exito o fracaso de la insercin de datos TextView alerta; public Thread hilo=new Thread(); /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.main); //crear la base de datos datos=new BD(this);

//Enlazar los instancias con los componentes de la interfaz //Se referencian en la Clase R.java segn el id que se le haya asiganado cedula=(EditText) findViewById(R.id.main_edittext_cedula); nombre=(EditText) findViewById(R.id.main_edittext_nombre); buscar = (Button) findViewById(R.id.main_button_buscar); cerrar = (Button) findViewById(R.id.main_button_cerrar); insertar = (Button) findViewById(R.id.main_button_insertar); notificacion=(RelativeLayout)findViewById(R.id.main_relativelayout_exito); alerta=(TextView)findViewById(R.id.main_textview_exito); buscar.setOnClickListener(new OnClickListener() { //Al hacer clic en el Botn buscar, vaya a la siguiente clase "busquedas" public void onClick(View v) { // TODO Auto-generated method stub Intent intent = new Intent(Ejemplo1.this, busquedas.class); startActivity(intent); //El TextView notificacin hgalo invisible notificacion.setVisibility(notificacion.INVISIBLE); } }); cerrar.setOnClickListener(new OnClickListener(){ //Al hacer clic en el Botn Cerrar finalice la ejecucin de la aplicacin public void onClick(View v) { // TODO Auto-generated method stub finish(); } }); //listener del boton para insertar los datos a la base de datos insertar.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { //obtener el texto de las cajas de texto String nom = nombre.getText().toString(); String ced = cedula.getText().toString(); if (ced != "" && nom != "") { //Si ced y num NO estn vacos //insertar en la base de datos long resultado=datos.insertarPersona(nom, ced); cedula.setText(""); //Vaciar el campo de texto cedula nombre.setText(""); //Vaciar el campo de texto nombre if(resultado!=-1) { //mostrar mensaje de exito alerta.setText("Insertado con xito!!"); //Hacer visible el TextView notificacion notificacion.setVisibility(notificacion.VISIBLE); } else //Si los campos de texto cedula y nombre estan vacos { alerta.setText("Error al insertar!!"); notificacion.setVisibility(notificacion.VISIBLE); } } } }); } }

2) BD.java En esta clase encontramos todas las herramientas necesarias para invocar los mtodos y atributos de una Base de Datos SQLite. Cdigo Fuente BD.java
package ejemplo1.Ejemplo1; //Importamos las libreras necesarias import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.util.Log; public class BD { SQLiteDatabase db; //Objeto db de tipo Base de Datos SQLite String tabla_personas ="CREATE TABLE IF NOT EXISTS personas (cedula INTEGER PRIMARY KEY, nombre TEXT NOT NULL);"; String[] tablas={"personas"}; //Context es una clase que permite acceder a los servicios y recursos de android, en este caso para acceder al servicio SQLite public BD(Context ctx)//constructor { try{ //openOrCreateDatabase(String name, int mode, SQLiteDatabase.CursorFactory factory); //name nombre de la base de datos //mode modo de operacion, 0 o privado por defecto para que solo pueda ser usado por la aplicacion, gestion de los permisos //factory clase que puede ser llamada para instanciar un cursor al usar un query, null por defecto //ms info: http://developer.android.com/reference/android/content/Context.html#openOrCreateDatabase%28java.lang .String,%20int,%20android.database.sqlite.SQLiteDatabase.CursorFactory%29 db = ctx.openOrCreateDatabase("bdprueba", 0, null); //execSQL(String sql); //sql cualquier sentencia de sql que no sea un query, acepta create table, delete, insert, etc //ms info: http://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html#execSQL%28java.la ng.String%29 db.execSQL(tabla_personas); } catch(Exception e){ //Log.d(String tag, String msg) //tag para dar nombre al error //msg mensaje del error //ms info: http://developer.android.com/reference/android/util/Log.html#d%28java.lang.String,%20java.lang.Strin g%29 Log.d("Base de Datos", "Exception initBD: "+ e.toString()); } }

public long insertarPersona(String nombre, String cedula){ //ContentValues clase utilizada para almacenar un conjunto de datos ContentValues cv = new ContentValues(); //put(String key, String value) //key nombre del valor a insertar //value dato a insertar //ms info: http://developer.android.com/reference/android/content/ContentValues.html#put%28java.lang.String,%20 java.lang.String%29 cv.put("nombre", nombre); cv.put("cedula", cedula); //insert(String table, String nullColumnHack, ContentValues values) //table tabla donde se va a insertar los datos //nullColumnHack inserta una fila null en la base de datos en caso que no existan datos a insertar //values datos a insertar en la columna //retorna -1 si hay error //ms info: http://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html#insert(java.lang. String, java.lang.String, android.content.ContentValues) return db.insert("personas", null, cv); } public String obtenerPersona(int nt, String [] atributos, String condicion){ Cursor c=null; try{ //query (String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit) //table nombre de la tabla a consultar //columns columnas que quiere obtener en la consulta //selection declarar cuales filas se van a retornar, condicion que se utiliza para saber que filas consultar (WHERE) //selectionArgs orden en el que va a aprecer los argumentos de las consulta //groupBy agrupas las filas //having indica cuales filas se incluyen en la consulta //orderBy ordenar las filas //limit lmitar el numero de filas //retorna un cursor que se posiciona en la primera fila de las obtenidas en la consulta //ms info: http://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html#query%28java.lang .String,%20java.lang.String[],%20java.lang.String,%20java.lang.String[],%20java.lang.String,%20java. lang.String,%20java.lang.String,%20java.lang.String%29

c = db.query(tablas[nt], atributos, condicion, null, null, null, null); //apuntar al primer registro de lo obtenido en la consulta c.moveToNext(); return c.getString(0); } catch (Exception e) { Log.d("BASEDATOS", e.toString()); } return ""; } }

3) busquedas.java En esta clase, direccionaremos en la base de datos segn el criterio de bsqueda ingresado por el usuario, y se mostrar el resultado de la consulta. A dicha clase, esta asociado el formulario bsqueda.xml. Cdigo Fuente busquedas.java
package ejemplo1.Ejemplo1; import android.view.View.OnClickListener; import import import import import import import android.app.Activity; android.os.Bundle; android.view.View; android.view.Window; android.widget.Button; android.widget.EditText; android.widget.TextView;

public class busquedas extends Activity { //Se declaran los objetos que se van a utilizar BD datos; //Objeto datos de la clase BD EditText cedula; //Objeto cedula de tipo EditText (Caja de texto) TextView resultado;//Objeto resultado de tipo TextView Button buscar; //Objeto buscar de tipo Button (Botn) Button anterior; //Objeto anterior de tipo Button (Botn) String lectura=null; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.busqueda); // TODO Auto-generated method stub //crear la base de datos datos=new BD(this); //Enlazar los instancias con los componentes de la interfaz //Se referencian en la Clase R.java segn el id que se le haya asiganado cedula = (EditText) findViewById(R.id.busqueda_edittext_nombre); resultado=(TextView)findViewById(R.id.busqueda_textview_resultado); anterior = (Button) findViewById(R.id.busqueda_button_anterior); buscar = (Button) findViewById(R.id.busqueda_button_buscar); anterior.setOnClickListener(new OnClickListener() { //Al hacer clic en el Boton anterior finalizar la aplicacin public void onClick(View v) { // TODO Auto-generated method stub finish(); } }); //listener del boton para recuperar los datos a la base de datos buscar.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { //arreglo para almacenar los atributos a obtener en la consulta a la base de datos String[] atributos = {"nombre"};

//llamar al mtodo que recupera los datos //Se envia: //- La ubicacion de la tabla en el arreglo de tablas //- La lista de atributos a obtener //- Condicin para la consulta lectura = datos.obtenerPersona(0, atributos, "cedula="+cedula.getText().toString()); //Determinar si se recupero algun registro de la base de datos para imprimirlo en pantalla if(lectura=="") resultado.setText("Identificacin no vlida"); else{ resultado.setText(lectura); } } }); }}

BIBLIOGRAFA
1. Google Play Store https://play.google.com/store 2. SQLite Official Page http://www.sqlite.org/index.html 3. SQLite for Android Developer http://developer.android.com/reference/android/database/sqlite/packagesummary.html 4. Descarga Eclipse ndigo http://www.eclipse.org/downloads/packages/release/indigo/sr2 5. Descarga Android SDK for Windows http://developer.android.com/sdk/index.html

S-ar putea să vă placă și