Manual Básico para la Creación de Bases de
Datos con SQLite en Android OS
Juan Sebastián Sánchez Gómez
Ingeniería de Siste...
Procedimiento:
Creación de un Proyecto Android en Eclipse:
Antes que nada, debemos crear un Proyecto Android:
Figura 1. Fi...
Figure 3. Create Android Project
Figura 4. Damos un nombre al Proyecto >> Next
Figura 5. Seleccionamos la Target Android p...
Figura 6. Por último damos un nombre al paquete (Package Name) >> Finish
Después de finalizar la creación se aprecian las ...
Desarrollo Interfaz Grafica de la Aplicación
En primer lugar, vamos a diseñar la interfaz de nuestra aplicación para el us...
Figura 8. Formulario main.xml
Este es el pantallazo principal, es decir la
primera impresión que tiene el usuario de
la ap...
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Insertado con éxito!"
and...
Figura 9. Formulario búsqueda.xml
Al hacer clic en el botón Buscar del
formulario main.xml, iremos a este
formulario, en e...
android:text="@string/cedula"
android:id="@+id/busqueda_textview_nombre"
android:textColor="#ffffff"
android:layout_margin...
Desarrollo de las Clases:
Como bien sabemos, tenemos dos formularios main.xml y búsqueda.xml, pero los
objetos que están i...
//Enlazar los instancias con los componentes de la interfaz
//Se referencian en la Clase R.java según el id que se le haya...
2) BD.java
En esta clase encontramos todas las herramientas necesarias para invocar los
métodos y atributos de una Base de...
public long insertarPersona(String nombre, String cedula){
//ContentValues clase utilizada para almacenar un conjunto de d...
3) busquedas.java
En esta clase, direccionaremos en la base de datos según el criterio de búsqueda
ingresado por el usuari...
//llamar al método que recupera los datos
//Se envia:
//- La ubicacion de la tabla en el arreglo de tablas
//- La lista de...
Upcoming SlideShare
Loading in...5
×

8564910 manual sq_lite

662

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
662
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
73
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Transcript of "8564910 manual sq_lite"

  1. 1. Manual Básico para la Creación de Bases de Datos con SQLite en Android OS Juan Sebastián Sánchez Gómez Ingeniería de Sistemas Universidad Manuela Beltrán Cuando hablamos de Dispositivo móviles, estamos acostumbrados a escuchar sobre los “Smartphone”, teléfonos 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 mayoría 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 año 2000, SQLite 2 un ambicioso proyecto de dominio público, entiéndase 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 librería portable de apenas (apróx. 275 Kb). Ahora bien, es posible integrar SQLite al sistema operativo móvil Android, gracias al paquete android.database.sqlite 3 , el cual contiene las clases de bases de datos SQLite, utilizadas para la gestión de nuestra base de datos privada. Para hacer posible esta integración, es necesario tener los conocimientos básicos en POO (Programación Orientada a Objetos) y en el lenguaje de programación 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 programación en Java, que incluye un editor de código, un compilador, un depurador y un constructor de interfaz gráfica (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 Programación de Aplicaciones), entiéndanse como las diferentes versiones de Android (en nuestro caso la API 10 Android Gingerbread).
  2. 2. Procedimiento: Creación 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
  3. 3. 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.
  4. 4. Figura 6. Por último damos un nombre al paquete (Package Name) >> Finish Después de finalizar la creación se aprecian las siguientes carpetas del proyecto Ejemplo1. Encontramos la carpeta Android 2.3.3 donde están las librerías de la API 10, la carpeta src (source) donde están contenidas las clases en el paquete, la carpetagen (Generated Java Files) donde están los archivos creados por defecto (R.java, BuildConfig.java); la carpeta res, que contiene drawable (imágenes e iconos), layout (formularios xml) y values (variables String) y por último en relevancia están los archivos Android Manifest (el archivo manifiesto para permisos) y Project.properties, creado por defecto.
  5. 5. Desarrollo Interfaz Grafica de la Aplicación En primer lugar, vamos a diseñar la interfaz de nuestra aplicación para el usuario final, para esto, debemos tener en cuenta: la presentación, simplicidad y funcionalidad. Cuando hablamos de presentación, tienen lugar los componentes visuales con los que el usuario interaccionará; simplicidad, consiste en el fácil acceso y control de estos componentes, y funcionalidad, es cumplir con las prestaciones y el perfil para el cual fue desarrollada nuestra aplicación. Android, hace uso de formularios .xml, con los cuales diseñamos la interfaz gráfica de nuestra aplicación, 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. Diseño Interfaz main.xml
  6. 6. Figura 8. Formulario main.xml Este es el pantallazo principal, es decir la primera impresión que tiene el usuario de la aplicación. En ella, encontramos dos EditText, el primero de ellos donde se ingresa la cedula y el segundo para el nombre, acompañados de sus respectivos TextView (Cédula y Datos del estudiante). Además 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 búsqueda o consulta en la base de datos, y el último termina la aplicación (Cerrar) Código 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" >
  7. 7. <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>
  8. 8. Figura 9. Formulario búsqueda.xml Al hacer clic en el botón Buscar del formulario main.xml, iremos a este formulario, en el cual es posible hacer una Búsqueda o Consulta en la base de datos gestionada por SQLite. Podemos apreciar, un EditText, en el cual el usuario ingresara el criterio de búsqueda, éste acompañado de su respectivo TextView (Cédula) y un TextView como título (Búsqueda). También se tienen dos botones, el primero Buscar, que inicia la búsqueda 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 búsqueda. Código Fuente búsqueda.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"
  9. 9. 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>
  10. 10. Desarrollo de las Clases: Como bien sabemos, tenemos dos formularios main.xml y búsqueda.xml, pero los objetos que están inmersos en ellos, no hacen nada hasta el momento, es por esto que es necesario empezar a programar los atributos y los métodos a los que se asocian los formularios, para dar funcionalidad a nuestra aplicación. Para ello, vamos a hacer uso de tres clases: Ejemplo1.java, BD.java, búsquedas.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. Código Fuente Ejemplo1. Java package ejemplo1.Ejemplo1; //Se importan las librerías 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 (Botón) Button cerrar; //Objeto cerrar de tipo Button (Botón) Button insertar;//Objeto insertar de tipo Button(Botón) 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 inserción 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);
  11. 11. //Enlazar los instancias con los componentes de la interfaz //Se referencian en la Clase R.java según 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 Botón 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 notificación hágalo invisible notificacion.setVisibility(notificacion.INVISIBLE); } }); cerrar.setOnClickListener(new OnClickListener(){ //Al hacer clic en el Botón Cerrar finalice la ejecución de la aplicación 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 están vacíos //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 vacíos { alerta.setText("Error al insertar!!"); notificacion.setVisibility(notificacion.VISIBLE); } } } }); } }
  12. 12. 2) BD.java En esta clase encontramos todas las herramientas necesarias para invocar los métodos y atributos de una Base de Datos SQLite. Código Fuente BD.java package ejemplo1.Ejemplo1; //Importamos las librerías 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 //más 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 //más 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 //más 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()); } }
  13. 13. 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 //más 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 //más 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 apàrecer 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 //más 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 ""; } }
  14. 14. 3) busquedas.java En esta clase, direccionaremos en la base de datos según el criterio de búsqueda ingresado por el usuario, y se mostrar el resultado de la consulta. A dicha clase, esta asociado el formulario búsqueda.xml. Código Fuente busquedas.java package ejemplo1.Ejemplo1; import android.view.View.OnClickListener; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.Window; import android.widget.Button; import android.widget.EditText; import 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 (Botón) Button anterior; //Objeto anterior de tipo Button (Botón) 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 según 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 aplicación 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"};
  15. 15. //llamar al método que recupera los datos //Se envia: //- La ubicacion de la tabla en el arreglo de tablas //- La lista de atributos a obtener //- Condición 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("Identificación no válida"); else{ resultado.setText(lectura); } } }); }} BIBLIOGRAFÍA 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/package- summary.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

×