Anda di halaman 1dari 24

Conexiones Android con Base de Datos

Conexin con Base de Datos SqlServer

Creando el proyecto y aadiendo el driver


Una vez descargado, abrimos nuestro IDE(en mi caso eclipse) y creamos una nueva
aplicacin de android.

Una vez creado importaremos el jar del driver jTDS a nuestro proyecto, para esto hacemos
click derecho sobre nuestro proyecto->Properties->Java Build Path->Libraries y en Add
External JARs..., buscamos nuestro jar descargado y click en OK.

La clase DBConnection
Creamos una nueva clase que llamaremos DBConnection y la crear como un Singleton,

Aadimos los atributos URL, USER y PASS que contendrn la informacin y credenciales
para conectarnos a la base de datos.

Ya saben lo que pienso sobre el cdigo duro pero dado que es un ejemplo, podemos dejarlo
pasar.

1
Despus creamos el mtodo que har la conexin, y en el instanciamos el driver para
despus pasarle nuestros datos de conexin al DriverManager.

Bueno, ya para terminar creare otro mtodo singleton que obtendr la conexin hecha en
nuestro mtodo conectar().

Entonces la clase final nos quedara de la siguiente manera:

2
Llamando a nuestra conexin
Ahora para llamar llamar a nuestra clase lo haremos de la manera como se llaman a las
clases Singleton.

WebService: Conexiones a base de datos Mysql desde Android. PARTE


1 (Insertar)
Buenas amigos, llevo un tiempo sin hacer nada por aqu, ya que estoy trabajando con
un grupo de programadores en un proyecto, pero a peticin popular, y a la cantidad de
email que me han mandado pidindome informacin para realizar conexiones a Mysql
desde android, voy a realizar este tema.

Bien, el tema en s es complejo, ojo, no difcil de entender, si no complejo de realizar,


vamos a realizar mucho cdigo para lo que realmente necesitamos, interactuar con
una base de datos mysql en un servidor.

Si habis hecho conexiones a mysql desde java sabris que con una clase que
contenga 4 o 5 lineas de cdigo podamos realizar nuestra conexin a mysql, podis
comprobarlo aqu, posteriormente solo tenamos que manejar los datos obtenidos (7 u
8 lineas) y ya podamos mostrar resultados en nuestro programa. Bien, esto en
android cambia y se vuelve ms complejo ya que, por seguridad, deberemos crear un
webservice para que nos sirva de puente entre nuestra aplicacin y nuestro servidor.

Un Webservice suele ser un archivo PHP que recibe peticiones de nuestra app y se
las enva al servidor, posteriormente el servidor responde a nuestro webservice, y
este, a su vez, responde a nuestra app. Os dejo una imagen para que lo entendis
mejor.

Un WebService no tiene porque ser un archivo PHP, tambin podramos realizar en


nuestro servidor un programa en java que escuche por socket nuestra app y pasarle
parmetros para que se comunique con el servidor, o podramos crear un archivo
javascript, o cualquier otra cosa que nos valga para comunicar nuestra app con
nuestro servidor, pero ya digo, que lo ms fcil, rpido y sencillo es un archivo PHP,
no os compliquis.

Bien, para crear la conexin a mysql necesitaremos:

Servidor con base de datos Mysql.

3
Mi base de datos esta compuesta por una tabla "personas" con los
siguientes campos:
DNI---Varchar
Nombre--Varchar
Telfono--Varchar
Email.--Varchar
Uno o varios WebService (segn necesitemos). Yo voy a utilizar 2:
Insert.php
selectAll.php
Una conexin mediante la clase HttpClient de la API de Apache
No hay que agregar libreras, esta API va incluida en el repositorio
android.
Ejecutarlo todo mediante hilos AsyncTask.
A partir de la versin 3 o superior, correrlo todo en AsyncTask es
obligatorio.

Bueno, sabiendo esto, creamos un nuevo proyecto con su respectiva activity.

Mi activity va a ser muy simple:

Podis observar que consta de:

4 TextView y 4 Edittext, para los campos a rellenar.


2 Button para insertar y mostrar.
2 ImageButton para pasar de una persona a otra y se nos vaya mostrando.
Bien, una vez tengamos nuestro diseo, nos vamos a nuestra clase.

Lo primero es ligar nuestra clase con el archivo xml y sus componentes:

4
Antes de continuar vamos a ir a nuestro archivo AndroidManifest y vamos a agregar
permisos de INTERNET, muy importante.

Una vez hecho todo lo anterior vamos a crear un mtodo que enve la informacin que
introducimos en los campos a nuestroWebService para que este se lo comunique al
servidor y obtener una respuesta.

5
Bueno, no os asustis de ver tanta linea, ante todo saber que solo trabajamos con 2
clases y un ArrayList:
HttpClient: Clase encargada de enviar la informacin almacenada
en httpPost a nuestro WebService.
HttpPost: almacena los datos que sern enviados, por medio de HttpClient, a
nuestro WebService.
List: Almacena objetos de tipo "NameValuePair" el cual almacena por
constructor (NameValuePair es una interfaz la cual implementa la
clase BasicNameValuePair ) una variable y el valor que contendr dicha variable, las
cuales son las que obtendr nuestro WebService.
Veamos:
Implementamos las clases con las que vamos a trabajar:
HttpClient httpclient=new DefaultHttpClient();
HttpPost httppost=new HttpPost("URL DE NUESTRO
WEBSERVICE EN EL SERVIDOR")
Yo tengo puesto la ip local de mi pc, ya que si ponemos
localhost o 127.0.0.1, el dispositivo va a buscar su propio localhost, el que va incluido
en el mvil, y puede crear errores, lo mejor si estas probando, la ip local de tu pc. Si
utilizas el emulador que trae el eclipse SDK android, tendrs que poner 10.0.0.2, ya
que si no te dar fallo.
List nameValuePairs=new ArrayList(4);
En este caso le damos a nuestro ArrayList un tamao (4) ya que
son el nmero de variables con las que vamos a tratar, si quieres utilizar 3, pones 3, y
as sucesivamente.

Ya tenemos nuestras clases preparadas, ahora vamos a almacenar los datos


de nuestros EditText en nuestroArrayList:
nameValuePairs.add(BasicNameValuePair("dni",
dni.getText().toString().trim()));

6
Bien, esto no tiene mucha historia, almacenamos objetos
de BasicNameValuePair con una variable y el valor que va a tener que le pasamos
por constructor. Agregamos a nuestroArrayList un objeto de este tipo segn el
tamao que le hayamos dado.
Una vez almacenados los datos, le pasamos el ArrayList a nuestra
clase HttpPost para que lo codifique:
httppost.setEntity(new UrlEncodeForEntity(nameValuePairs));
Bueno, una vez que lo tenemos codificado con la url del webservice y la
informacin de nuestro ArrayList, hacemos que HttpClient lo enve:
httpclient.execute(httppost);

Bueno, no era tan difcil, si un poco complejo, pero no difcil.

Bien, ya hemos enviado nuestra informacin a nuestro WebService, veamoslo con lo


que le hemos enviado:

Veamos, este es nuestro WebService, un archivo escrito en PHP que interactua con
nuestro servidor, su funcionamiento sera de la siguiente manera:
Rellenamos las variables del localhost con la informacin de nuestro servidor:
Hostname: Nombre del host.
Database: Nombre de nuestra base de datos.
Username: Nombre de usuario del servidor.
Password: Contrasea del servidor.
Posteriormente, con los datos de servidor que hemos introducido, le pedimos
que conecte al servidor y almacene la respuesta en otra variable:
$localhost =
mysql_connect($hostname_localhost,$username_localhost,$password_localhos
t)
Si no puede conectar enviara un informe de error
or trigger_error(mysql_error(),E_USER_ERROR);
Una vez conectado al servidor, buscar nuestra base de datos y se conectar:
mysql_select_db($database_localhost, $localhost);
Posteriormente, y una vez encontrad la base de datos, obtendr las variables
que le pasamos por nuestra aplicacin y las almacenar en otras variables que pueda
manejar mejor.
$nombre=$_POST['nombre'];
$dni=$_POST['dni'];
$telefono=$_POST['telefono'];

7
$email=$_POST['email'];
Daos cuenta de que los nombres entre comillas simples se
llaman igual a las variables que les pasamos por nuestra app.
Almacenadas las variables, introduce los valores en un sentencia sql para
realizar una consulta al servidor:
$query_search = "insert into personas(nombre,dni,telefono,email)
values ('".$nombre."','".$dni."','".$telefono."','".$email."')";
Cuidado con las comillas simples y dobles, que puede ser un
folln jeje.
Finalmente, y si todo ha ido bien, realizar la consulta a nuestro servidor, el
cual, en caso de fallar la sentencia, nos enviar un informe de error.
$query_exec = mysql_query($query_search) or die(mysql_error());
Cerramos la conexin.
mysql_close($localhost);
Bien, ya tenemos el cdigo java para conectarnos a nuestro servidor por medio de
android y tenemos un webservice escrito en PHP que hace de puente entre nuestra
app y el servidor, pero an nos queda un ltimo paso, realizar la consulta por medio de
una clase AsyncTask.

NOTA:No voy a hacer aqu una explicacin sobre el funcionamiento de una clase AsyncTask,
ya que me quedara muy extenso el post, en el futuro crear un tema para esta clase. En
google puedes encontrar mucha informacin sobre esta clase.

Nos volvemos a nuestra clase, y creamos una clase interna que herede
de AsyncTask:

8
Bien, en el mtodo doInBackground creamos una condicin if, en el cual
introducimos como condicin el mtodo insertar() (por esa razn lo hice booleano) si
se los datos han sido insertados, el mtodo nos devuelve true y nos muestra
un Toast con el xito de la operacin y limpiando nuestro formulario, todo esto debe
correr en un hilo ya que si no bloqueara nuestroAsyncTask y nos funde a errores, si
los datos no han podido ser insertados, el mtodo insertar nos devolver false, y nos
mostrar un Toast corriendo en un hilo.

Bueno, ya lo tenemos todo:


Un servidor. Bien!
Un WebService. Bien!
Un mtodo para conectar con nuestro WebService. Bien!
Una clase AsyncTsk que ejecuta nuestro cdigo. Bien!
Solo nos falta ir al botn insertar y darle una accin, para cuando se pulse ejecute todo
al mismo tiempo.

Finalmente ya lo tenemos, cuando pulsemos nuestro botn comprobar que no haya


ningn campo vaco, si lo hay, enviar un mensaje y no insertar nada.

Bueno, mencionar que mi dispositivo android no me hace bien las capturas de fotos y
nos puedo mostrar una captura con datos, pero si os puedo mostrar como los muestra
mi tabla personas una vez insertado los datos.

9
Listas en Android con ListView
ListView es uno de los patrones de diseo ms comunes de Android, es la lista en la que
se puede hacer scroll que aparece en casi todas las aplicaciones de Android. Pueden ser
muy sencillas desde slo mostrar una lnea de texto, hasta tener imgenes, mltiples
botones, ser desplegables entre otros.

Este es un tutorial de varias partes donde comenzaremos desde la listas ms simples e


iremos avanzando a listas ms complejas, si no tienes conocimiento de ListView es
bueno que hagas todas las partes para que as comprendas mejor todos los conceptos.

10
ListView Android

Como la mejor forma de aprender es haciendo vamos a crear una pequea aplicacin y
simple que va a mostrar una lista de cosas por hacer y la cual vamos a llamar MiLista.

Crear el Proyecto
Vamos a utilizar Android Studio.

Primero vamos a crear un proyecto con las siguientes caractersticas:

Nombre: MiLista.
Minimum SDK: 15, es decir Android 4.0.3 en adelante, que ms que suficiente para este
tutorial.
Actividad: Activity with Fragment y le dejaremos el nombre por defecto MainActivity.

Para aprender a instalar Android Studio o crear un nuevo proyecto.

Una vez creado tendremos un archivo llamado fragment_main.xml en el


directorio app/res/layout/

Hacemos doble click sobre este archivo si ya no est abierto y nos vamos a encontrar
con este cdigo:

<RelativeLayout xmlns:android="http://schemas.android.com/app/res/android"

xmlns:tools="http://schemas.android.com/tools" android:layout_width="matc
h_parent"

android:layout_height="match_parent" android:paddingLeft="@dimen/activity
_horizontal_margin"

android:paddingRight="@dimen/activity_horizontal_margin"

android:paddingTop="@dimen/activity_vertical_margin"

android:paddingBottom="@dimen/activity_vertical_margin"

tools:context=".MainActivity$PlaceholderFragment">

<TextView android:text="@string/hello_world" android:layout_width="wrap_c


ontent"

android:layout_height="wrap_content" />

</RelativeLayout>

11
Que es el contenido por defecto del Fragmento con la palabra Hello World. Vamos a
borrar el TextView y lo vamos a reemplazar por nuestra lista quedndonos el cdigo as:

<RelativeLayout xmlns:android="http://schemas.android.com/app/res/android"

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:paddingLeft="@dimen/activity_horizontal_margin"

android:paddingRight="@dimen/activity_horizontal_margin"

android:paddingTop="@dimen/activity_vertical_margin"

android:paddingBottom="@dimen/activity_vertical_margin"

tools:context=".MainActivity$PlaceholderFragment">

<ListView

android:id="@+id/milista"

android:layout_width="match_parent"

android:layout_height="wrap_content" />

</RelativeLayout>

Como ven ahora tenemos un elemento ListView el cual tiene las siguientes propiedades:

android:id = milista. Este es el id que utilizaremos en nuestro cdigo para referirnos a


nuestra lista.
android:layout_width = match_parent. Con esto le decimos a nuestra aplicacin que la
lista ocupar todo el ancho disponible por el padre en este caso el RelativeLayout.
android:layout_height = wrap_content. Este valor indica que la lista ser tan alta como
sea necesario para mostrar el contenido.

Adapter
Muy bien ahora tenemos nuestro ListView dentro del fragmento de la actividad
principal, pero no nos sirve de mucho vacio.

El ListView est comprendido por ListItems estos Items son cada una de las filas de
nuestro ListView y el contenido de estos Items viene dado por un adaptador o Adapter
en el lenguaje de Android.

12
Podemos pensar en el Adapter como un puente entre nuestra vista y los datos que
queremos mostrar, este Adapter puede convertir los datos de un arreglo, de una base de
datos, de un archivo JSON o cualquier otra fuente a un formato que entienda nuestro
ListView.

Android trae varios tipos de adaptadores ya prehechos y tambin podemos hacer


nuestros propios adaptadores si as lo queremos, cuando son cosas sencillas y que
podamos utilizar un adaptador prehecho es lo ms recomendable, ya cuando queremos
hacer vistas ms complejas (como mostrar imgenes, botones, etc) o comportamientos
ms complejos (como reordenar la lista) tendremos que hacer nuestros propios
adaptadores.

ArrayAdapter
Para este tutorial, que es el primero de la serie, vamos a utilizar un adaptador
llamado ArrayAdapterque como su nombre lo indica toma un arreglo en Java y lo
transforma a nuestro ListView. Este es uno de los Adaptadores ms simples, y espera un
slo campo de texto o TextView para llenar.

Asignar el ArrayAdapter a nuestra vista

Abrimos la clase MainActivity, dentro de esta clase tenemos una clase llamada
PlaceholderFragment que es la que maneja el Fragmento donde tenemos nuestra lista.

Dentro del mtodo onCreateView() de PlaceholderFragment vamos a aadir las


siguientes lneas antes de return rootView.

@Override

public View onCreateView(LayoutInflater inflater, ViewGroup container,

Bundle savedInstanceState) {

View rootView = inflater.inflate(R.layout.fragment_main, container, false


);

// A. Creamos el arreglo de Strings para llenar la lista

String[] cosasPorHacer = new String[] { "Aprender a programar en Android"


,

"Hacer una aplicacin famosa","Vender la aplicacin","Esperar a que llegu


e el dinero"};

13
// B. Creamos un nuevo ArrayAdapter con nuestra lista de cosasPorHacer

ArrayAdapter arrayAdapter = new ArrayAdapter(getActivity(),

android.R.layout.simple_list_item_1, cosasPorHacer);

// C. Seleccionamos la lista de nuestro layout

ListView miLista = (ListView) rootView.findViewById(R.id.milista);

// D. Asignamos el adaptador a nuestra lista

miLista.setAdapter(arrayAdapter);

return rootView;

Vamos a ver lo que hicimos, en el cdigo pueden cada punto como comentario:

A. Primero creamos un arreglo tipo String llamado cosasPorHacer, cada uno de los
elementos va a representar una fila en nuestra lista.

B. Luego creamos un ArrayAdapter cuyo constructor toma 3


parmetros ArrayAdapter(Contextcontext, int resource, T[] objects):

El primer parmetro es el contexto en este caso getActivity(), nos da el contexto de la


actividad donde se est llamando el fragmento.
Luego tenemos el Recurso, que es en este caso el layout interno de la lista. En esta
oportunidad estamos utilizando uno suministrado por el SDK de Android que se llama
simple_list_item_1 que no es ms que un nico TextView, no lo tenemos que crear sino
que viene incluido en el SDK. El cdigo lo pueden ver aqu.
Por ltimo tenemos el arreglo que en nuestro caso es el que creamos llamado
cosasPorHAcer.

C. Seleccionamos la lista que creamos anteriormente en el layout. Utilizamos rootView


ya que es la vista Padre del fragmento y buscamos nuestra vista por id en nuestro caso
R.id.milista.

D. Por ltimo le decimos a la lista que su adaptador va a ser el que creamos


arrayAdapter.

Esto es todo una vez que tengas este cdigo puedes correr la aplicacin en el botn de
Build de Android

14
Lo puedes hacer correr en un telfono que tengas conectado a tu computador o en el
emulador. Vers una pantalla parecida a esta:

Mi Lista 1

15
Como ves Android coloca cada elemento en una fila, tiene el separador por defecto de
las listas y si hacemos la lista lo suficientemente larga agregando ms elementos a
nuestro arreglo tendremos Scroll automticamente.

Detectar Click sobre Item


Ahora que tenemos nuestra lista, queremos saber cuando el usuario toca alguno de los
elementos y reaccionar, en este caso vamos a hacer que nos muestre un pequeo
mensaje cada vez que se toca un item. Para eso tenemos que implementar
onItemClickListener(), de la siguiente forma:

// D. Asignamos el adaptador a nuestra lista

miLista.setAdapter(arrayAdapter);

miLista.setOnItemClickListener(new AdapterView.OnItemClickListener(
) {

@Override

public void onItemClick(AdapterView<?> parent, View view, int posi


tion, long id) {

Toast.makeText(getActivity(), "Hiciste click en el nmero " + posi


tion,

Toast.LENGTH_LONG).show();

});

Le asignamos el Listener a nuestra lista para que reaccione cada vez que se toca alguno
de los items.
Sobreescribimos el mtodo onItemClick que va a tener los parmetros mostrados
Creamos un Toast, que es un pequeo mensaje que se despliega sobre la ventana, en el
cual mostramos la posicin del item que le hicimos click, la posicin comienza en el
nmero 0.

Ahora corremos la aplicacin y cuando toquemos un item nos saldr un mensaje como
este:

16
17
1. Crea un nuevo Application Android Project con la siguiente
configuracin:
Nombre de la aplicacin: Prueba de SQLite
Nombre del proyecto: SQLiteTest
Nombre del paquete: com.tutorial.sqlitetest
Actividad: Actividad en blanco
Nombre de la actividad: MainActivity.java
Nombre de Presentacin: activity_main.xml
2. Crearemos dos clases en el paquete com.tutorial.sqlitetest, estas se
llamaran, SQLiteHelper.java y SQLite.java.

3. La clase SQLiteHelper.java , como se ve en la introduccin a SQLite ,


que utiliza mtodos para anular el onCreate () y ONUPGRADE ().
En esta ocasin haremos algo ms que conectarnos a la base de datos,
por lo que debemos introducir algunas mejoras a nuestro cdigo, la
instruccin SQL que utilizamos para la creacin de la tabla PERSONA,
es la siguiente:
CREAR TABLA persona (
ID INTEGER PRIMARY KEY AutoIncrement NOT NULL ,
nombre TEXTO ,
Apellido TEXTO ,
sexo TEXTO
)
Esta instruccin SQL la implementamos en la
claseSQLiteHelper.java junto a otras variables como se ve a
continuacin:
paquete com . tutorial . sqlitetest ;

import android . content . Context ;


import android . database . sqlite . SQLiteDatabase ;
import android . database . sqlite . SQLiteOpenHelper ;

public class SQLiteHelper extiende SQLiteOpenHelper {

// Nombre de la BASE DE DATOS


privado static final Cadena __DATABASE = "dbTest" ;
// Versin de la BASE DE DATOS
privado static final int __VERSION = 1 ;
// nombre tabla y Campos de Tabla
public final Cadena __tabla__ = "persona" ;
public final cadena __campo_id = "id" ;
public final cadena __campo_nombre = "nombre" ;
pblico final cadena __campo_apellido = "Apellido" ;
public final cadena __campo_sexo = "sexo" ;
// Instruccin SQL para las tablas CREAR

18
final privado cadena sql = "CREATE TABLE" + __tabla__ + "(" + __campo_id +
"INTEGER PRIMARY KEY AutoIncrement NOT NULL," + __campo_nombre + "TEXTO" +
__campo_apellido + "TEXTO" + __campo_sexo + "TEXTO)" ;

/ **
* Constructor de clase
**/
pblico SQLiteHelper ( Contexto contexto ) {
sper ( contexto , __DATABASE , nula , __VERSION );
}

@Anular
pblica vaco onCreate ( SQLiteDatabase db ) {
db . execSQL ( sql );
}

@Anular
pblica vaco ONUPGRADE ( SQLiteDatabase db , int OldVersion , int newVersion
){
si ( newVersion > OldVersion )
{
// Elimina tabla
db . execSQL ( "DROP TABLE IF EXISTS" + __tabla__ );
// y LUEGO Creamos la nueva tabla
db . execSQL ( sql );
}
}

}
4. Por lo general, cuando se trabaja con base de datos, se introducen
datos (INSERT), se actualizan datos (UPDATE) , se eliminan datos
(DELETE) y se extraen datos (SELECT), Android cuenta
conSQLiteDatabase el cual tiene todos los mtodos necesarios para
llevar a cabo estas tareas.
A continuacin, veremos cada uno de estos mtodos y como
implementarlos en nuestra clase SQLite.java
Consultas. Para realizar consultas, SQLiteDatabase dispone de varios
mtodos llamados QUERY con diferentes parmetros de entrada, el
valor que retorna es un Cursor. Puedes ver ms sobre este QUERY en
la API de Android.
public Cursor getSoloHombres()
{
Log.i("SQLite", "query -> Consulta solo registros sexo='Hombre' " );
//tabla
//columnas ,
//selection WHERE ,
//selectionArgs , groupby, having,
//orderby
return db.query( sqliteHelper.__tabla__ ,
new String[]{ sqliteHelper.__campo_id , sqliteHelper.__campo_nombre ,
sqliteHelper.__campo_apellido},
" sexo='Hombre' ",
null, null, null,
" nombre ASC " );
}
INSERT. Para agregar registros se hace uso del mtodo INSERT para
los valores se utiliza ContentValues , en este ejemplo declaramos un

19
mtodo para agregar una nueva persona el cual cuenta con tres campos
los cuales debemos declarar en ContentValues mediante la
instruccin PUT( KEY, VALUE ). El valor de retorno sera -1 si ocurri
algn error caso contrario retorna el ID de la fila insertada.
pblica a largo insertarPersona ( Cadena nombre , cadena Apellido , Cadena sexo )
{
Log . i ( "SQLite" , "INSERT:" + nombre + "," + Apellido + "," + sexo );
ContentValues nullColumnHack, los valores vuelven db . inserte ( sqliteHelper .
__tabla__ , nulos , contentValues ); }

DELETE. Para eliminar registros tenemos el mtodo delete, retorna el


numero de filas afectas o en su defecto cero.
pblica int delete ( Cadena mesa , Cadena whereClause , Cuerda [] whereArgs )
Implementando delete en nuestro mtodo eliminarpersona()
pblica int eliminarPersona ( int ID )
{
Log . i ( "SQLite" , "BORRAR: id =" + ID );
// mesa, whereClause, whereArgs
retorno db . borrar ( sqliteHelper . __tabla__ , sqliteHelper . __campo_id +
"=" + Identificacin , nula );
}
UPDATE. Para acabar con los de mtodos de manipulacin de base de
datos, tenemos el mtodo UPDATE que permite actualizar registros.
Retorna el nmero de filas afectadas.
pblica int actualizarPersona ( int ID , Cadena nombre , cadena Apellido , Cadena
sexo )
{
Log . i ( "SQLite" , "ACTUALIZACIN: id =" + ID + "-" + nombre + "," + Apellido
+ "," + sexo );
ContentValues = " + ID , nula ); }

El cdigo completo de la clase SQLite.java es:


paquete com . tutorial . sqlitetest ;

import android . content . ContentValues ;


import android . content . Context ;
import android . database . Cursor ;
import android . database . sqlite . SQLiteDatabase ;
import android . util . Log ;

public class SQLite {

SQLiteHelper sqliteHelper ;
SQLiteDatabase db ;

/** Constructor de clase */


public SQLite(Context context)
{
sqliteHelper = new SQLiteHelper( context );
}

/** Abre conexion a base de datos */


public void abrir(){
Log.i("SQLite", "Se abre conexion a la base de datos " + sqliteHelper.getDatabaseName() );
db = sqliteHelper.getWritableDatabase();

20
}

/** Cierra conexion a la base de datos */


public void cerrar()
{
Log.i("SQLite", "Se cierra conexion a la base de datos " + sqliteHelper.getDatabaseName() );
sqliteHelper.close();
}

/**
* Metodo para obtener registros que correspondan solo a "hombres" ordenados por nombre
* @return Cursor
* */
public Cursor getSoloHombres()
{
Log.i("SQLite", "query -> Consulta solo registros sexo='Hombre' " );
//tabla
//columnas ,
//selection WHERE ,
//selectionArgs , groupby, having,
//orderby
return db.query( sqliteHelper.__tabla__ ,
new String[]{ sqliteHelper.__campo_id , sqliteHelper.__campo_nombre ,
sqliteHelper.__campo_apellido},
" sexo='Hombre' ",
null, null, null,
" nombre ASC " );
}

/**
* Metodo para agregar un nuevo registro
* @param nombre
* @param apellido
* @param sexo
* @return -1 si ocurrio un error o ID de fila insertada
* */
public long insertarPersona( String nombre, String apellido, String sexo )
{
Log.i("SQLite", "INSERT: " + nombre + "," + apellido + "," + sexo );
ContentValues contentValues = new ContentValues();
contentValues.put( sqliteHelper.__campo_nombre , nombre);
contentValues.put( sqliteHelper.__campo_apellido , apellido);
contentValues.put( sqliteHelper.__campo_sexo , sexo);
//table, nullColumnHack, values
return db.insert( sqliteHelper.__tabla__ , null, contentValues );
}

/**
* Metodo para eliminar un registro
* @param id Identificador unico de registro PRIMARY KEY
* @return El nmero de filas afectadas 0 en caso contrario.
* */
public int eliminarPersona( int id )
{
Log.i("SQLite", "DELETE: id=" + id );
//table , whereClause, whereArgs
return db.delete( sqliteHelper.__tabla__ , sqliteHelper.__campo_id + " = " +
id , null);
}

/**

21
* Metodo para actualizar un registro
* @param id Identificador unico de registro PRIMARY KEY
* @param nombre
* @param apellido
* @param sexo
* @return numero de filas afectadas
* */
public int actualizarPersona( int id, String nombre, String apellido, String sexo )
{
Log.i("SQLite", "UPDATE: id=" + id + " - " + nombre + "," + apellido + "," + sexo
);
ContentValues contentValues = new ContentValues();
contentValues.put( sqliteHelper.__campo_nombre , nombre);
contentValues.put( sqliteHelper.__campo_apellido , apellido);
contentValues.put( sqliteHelper.__campo_sexo , sexo);
return db.update( sqliteHelper.__tabla__ , contentValues,
sqliteHelper.__campo_id + " = " + id , null);
}

/**
* Metodo que dado un Cursor, recorre los registros y coloca en un String
* @param Cursor
* @return String registros separados por comas y salto de linea
* */
public String imprimirListaHombres( Cursor cursor )
{
StringBuffer lista = new StringBuffer();
if( cursor.moveToFirst() )
{
do{
lista.append( cursor.getString( 0 ) + ", " );
lista.append( cursor.getString( 1 ) + ", " );
lista.append( cursor.getString( 2 ) + "\r\n" );
}while( cursor.moveToNext() );
}
return lista.toString();
}

}
5. Finalmente, debemos implementar la clase SQLite.java en
el MainActivity.java, de la siguiente forma:
paquete com . tutorial . sqlitetest ;

import android . os . Bundle ;


import android . app . Activity ;
import android . database . Cursor ;
import android . util . Log ;
import android . view . Menu ;

public class MainActivity extiende Actividad {

@Anular
protegidos void onCreate ( Bundle savedInstanceState ) {
sper . onCreate ( savedInstanceState );
setContentView ( R . diseo . activity_main );

//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Log . i ( "SQLite" , "===================================================" );
Log . i ( "SQLite" , "Inicio SQLite de Aplicacin " );
SQLite SQLite = nueva SQLite ( este );
sqlite . abrir ();

22
//
Entrar . i ( " SQLite " , " Se insertan 4 registros " );
sqlite . insertarPersona ( " Paco " , " Mermela " , "Hombre" ); // id = 1
sqlite . insertarPersona ( "Juana" , "Fulanita" , "Mujer" ); // id = 2
sqlite . insertarPersona ( "Tula" , "traes" , "Hombre" ); // id = 3
sqlite . insertarPersona ( "Aquiles" , "Brinco" , "Hombre" ); // id = 4
//
Entrar . i ( "SQLite" , "Se imprime registros de tabla" );
cursor cursor = sqlite . getSoloHombres (); // Se obtiene registros
de cadena Lista = sqlite . imprimirListaHombres ( cursor );
Log . i ( "SQLite" , "Registros: \ r \ n " + Lista );
// Se Actualiza registro con ID # 3
Log . i ( "SQLite" , "Se Actualiza registro con ID # 3" );
sqlite . actualizarPersona ( 3 , "Monty" , "quemaduras" , "Hombre" );
// Se Elimina registro con ID # 4
Log . i ( "SQLite" , "Se Elimina registro con ID # 4" );
sqlite . eliminarPersona ( 4 );
//
Entrar . i ( "SQLite" , "Se imprime registros Hombres en solitario" );
cursor = sqlite . getSoloHombres (); / / Se obtiene registros
lista = sqlite . imprimirListaHombres ( cursor );
Log . i ( "SQLite" , "Registros: \r\n " + lista );
//
sqlite . cerrar ();
Log . i ( "SQLite" , "fin " );
Log . i ( "SQLite" , "===================================================" );
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

@Anular
pblica booleano onCreateOptionsMenu ( Men men ) {
// Inflar el men; esto agrega elementos a la barra de accin si est presente.
getMenuInflater (). infle ( R . men . principal , men );
volver verdadera ;
}

}
No hacemos uso de ningn TextView, Button, etc, por lo que cuando
ejecutemos el programa la interfaz mostrara el clsico Hello World,
donde deberemos estar atentos es en LogCat, ah veremos paso a paso
el desarrollo de la aplicacin.
logcat

23
Con este segundo post sobre SQLite terminamos lo que es introduccin
a base de datos en Android, trate de mostrar como es el trabajo de
bases de datos con ejemplos prcticos en lugar de llenarlos de
conceptos, si se te presenta alguna duda, la API de SQLite esta por
dems completa y es de lectura obligatoria si es que quieres disear
aplicaciones android con base de datos.

24

Anda mungkin juga menyukai