Sigueme en Facebook Sigueme en Twitter Sigueme en Instagram Sigueme en Youtube
JC Mouse Bolivia
Index / Android / SQLite INSERT, UPDATE, DELETE, QUERY

SQLite INSERT, UPDATE, DELETE, QUERY

Autor jc mouse jueves, agosto 8, 2013

En este segundo post sobre Android y SQLite, veremos el uso de los métodos de gestión de base de datos más utilizados, en si, es una continuación de un post anterior, “Introducción a SQLite” por lo cual para seguir correctamente este tutorial, es obligatorio haber leído la introducción a base de datos en Android.

 Herramientas necesarias.

– Eclipse Indigo y android instalado y configurado

Nivel: Android básico, Java intermedio, SQL básico.

Tiempo: 20 minutos

Proyecto Base de datos Android

1. Crea un nuevo Application Android Project con la siguiente configuración:

Application Name: SQLite Test

Project Name: SQLiteTest

Package Name: com.tutorial.sqlitetest

Activity: Blank Activity

Activity Name: MainActivity.java

Layout Name: activity_main.xml

2. Crearemos dos clases en el paquete com.tutorial.sqlitetest, estas se llamaran, “SQLiteHelper.java” y “SQLite.java“.

sqlite java

3. La clase SQLiteHelper.java , como vimos en introducción a SQLite, nos sirve para  sobreescribir los métodos onCreate() y onUpgrade().

En esta ocasión haremos algo más que conectarnos a la base de datos, por lo que debemos introducir algunas mejoras a nuestro código, la instrucción SQL que utilizamos para la creación de la tabla PERSONA, es la siguiente:

CREATE TABLE persona (
id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
nombre TEXT,
apellido TEXT,
sexo TEXT
)

Esta instrucción SQL la implementamos en la clase SQLiteHelper.java junto a otras variables como se ve a continuación:

package com.tutorial.sqlitetest;

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

public class SQLiteHelper extends SQLiteOpenHelper {

 //nombre de la base de datos
 private static final String __DATABASE = "dbTest";
 //versión de la base de datos
 private static final int __VERSION = 1;
 //nombre tabla y campos de tabla
 public final String __tabla__ = "persona";
 public final String __campo_id = "id";
 public final String __campo_nombre = "nombre";
 public final String __campo_apellido = "apellido";
 public final String __campo_sexo = "sexo";
 //Instrucción SQL para crear las tablas 
 private final String sql = "CREATE TABLE " + __tabla__ + " ( " + __campo_id + " INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, " + __campo_nombre + " TEXT, " + __campo_apellido + " TEXT, " + __campo_sexo + " TEXT )";

 /**
 * Constructor de clase
 * */
 public SQLiteHelper(Context context) {  
  super( context, __DATABASE, null, __VERSION );  
 }

 @Override
 public void onCreate(SQLiteDatabase db) {  
   db.execSQL( sql );   
 }

 @Override
 public void onUpgrade( SQLiteDatabase db,  int oldVersion, int newVersion ) {  
  if ( 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 con SQLiteDatabase el cual tiene todos los métodos necesarios para llevar a cabo estas tareas.

A continuación, veremos cada uno de estos métodos y como implementarlos en nuestra clase SQLite.java

Consultas. Para realizar consultas, SQLiteDatabase dispone de varios métodos llamados QUERY con diferentes parámetros de entrada, el valor que retorna es un Cursor. Puedes ver más 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 método INSERT para los valores se utiliza ContentValues , en este ejemplo declaramos un método para agregar una nueva persona el cual cuenta con tres campos los cuales debemos declarar en ContentValues mediante la instrucción PUT( KEY, VALUE ). El valor de retorno sera -1 si ocurrió algún error caso contrario retorna el ID de la 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 );
 }

DELETE. Para eliminar registros tenemos el método delete, retorna el numero de filas afectas o en su defecto cero.

public int delete (String table, String whereClause, String[] whereArgs)

Implementando delete en nuestro método eliminarpersona()

 public int eliminarPersona( int id )
 {
  Log.i("SQLite", "DELETE: id=" + id );
  //table , whereClause, whereArgs
  return db.delete( sqliteHelper.__tabla__ , sqliteHelper.__campo_id + " = " + id ,  null);
 }

UPDATE. Para acabar con los de métodos de manipulación de base de datos, tenemos el método UPDATE que permite actualizar registros. Retorna el número 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);
 }

El código completo de la clase SQLite.java es:

package 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();   
 }

 /** 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 número 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);
 }

 /**
 * 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:

package 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 extends Activity {

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);

  //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  Log.i("SQLite", "===================================================" );
  Log.i("SQLite", "Inicio de aplicación SQLite" );
  SQLite sqlite = new SQLite( this );  
  sqlite.abrir();
  //
  Log.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
  //
  Log.i("SQLite", "Se imprime registros de tabla" );
  Cursor cursor = sqlite.getSoloHombres();//Se obtiene registros
  String 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", "Burns", "Hombre" );
  //Se elimina registro con ID #4
  Log.i("SQLite", "Se elimina registro con ID #4" );
  sqlite.eliminarPersona( 4 );
  //
  Log.i("SQLite", "Se imprime registros solo hombres" );
  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", "===================================================" );
  //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

 }

 @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;
 }

}

No hacemos uso de ningún TextView, Button, etc, por lo que cuando ejecutemos el programa la interfaz mostrara el clásico “Hello World“, donde deberemos estar atentos es en LogCat, ahí veremos paso a paso el desarrollo de la aplicación.

LOGCAT

logcat eclipse

Con este segundo post sobre SQLite terminamos lo que es introducción a base de datos en Android, trate de mostrar como es el trabajo de bases de datos con ejemplos prácticos en lugar de llenarlos de conceptos, si se te presenta alguna duda, la API de SQLite esta por demás completa y es de lectura obligatoria si es que quieres diseñar aplicaciones android con base de datos.

Descarga el proyecto JUSTAMENTE DESDE ESTE ENLACE POBRE 🙂

Enjoy 🙂

Tags

Si te ha gustado podrías compartirlo o dejar un comentario. ¡Muchas gracias!
Autor: JC Mouse

Yo soy yo :) JC Mouse, Soy orgullosamente boliviano soy fundador y CEO de la web jc-Mouse.net uno de las pocas web en emprendimiento y tecnología en Bolivia.

Toda la información que encuentres en este sitio es y sera completamente gratis siempre, puedes copiar, descargar y re-publicar si así lo deseas en otros blogs o sitios web, solo te pido a cambio que dejes una referencia a esta web. Esto nos ayuda a crecer y seguir aportando. Bye

Enjoy! :)

También Te Podría Interesar

Generar esquema XSD a partir de clases java

Generar esquema XSD a partir de clases java

En un post anterior vimos como usar la herramienta XJC del JDK para generar clases java desde esquemas XSD (XML Schema D...

Impresión de imágenes en PDF

Impresión de imágenes en PDF

Existen varias aplicaciones (free y de pago) que emulan una impresora virtual para generar archivos en PDF  (Portable Do...

Evitar ejecutar un programa java más de una vez

Evitar ejecutar un programa java más de una vez

Cuando se hace uso de programas a veces no importa que este cree más de una instancia al mismo tiempo, por ejemplo podem...

Introducción a los Gráficos en Pygame

Introducción a los Gráficos en Pygame

Antes de programar un videojuego, es necesario saber: Cómo representar figuras en la pantalla Cómo se manejan las coorde...

Gráficos iReport con parámetros tipo Date

Gráficos iReport con parámetros tipo Date

Matando dos pájaros de un solo tiro :), doy respuesta a un par de preguntas que están relacionadas, en este post veremos...

Texto e Imagen en Java2d (Proyecto)

Texto e Imagen en Java2d (Proyecto)

Nivel: Intermedio-Avanzado IDE: Netbeans 6.9 o Sup. Tiempo: 30 minutos En este tutorial crearemos una aplicación que nos...

2 comentarios en “SQLite INSERT, UPDATE, DELETE, QUERY”

  1. Comando delta dice:

    Si quieres un programa mucho mejor te recomiendo que uses
    Demo Dakota 1.0
    es mi programa que estoy creando en java
    para convertir aplicaciones jar a un ejecutable .exe
    esta muy bueno
    lo podes descargar de mygnet.net java codigos
    Si tiene virus me lo puedes informar
    mi correo es eclipseconsol@gmail.com
    para explicarme que pasa o si quieres el codigo
    jajajajaaj

  2. carlos dice:

    Gracias por el aporte.
    Funciona al 99% porque después de terminar de cargar el splash la ventana de la aplicación queda minimizada en la barra de tareas.

Los comentarios estan cerrados

Comparte lo que sabes

Categorias

Últimas entradas

Acierta los colores o Adivina los colores es un sencillo juego que consiste en que dado 6 colores “rojo”,...

“MyBatis es una herramienta de persistencia Java que se encarga de mapear sentencias SQL y procedimientos almacena...

MyBatis es un framework de persistencia Java que se encarga de mapear sentencias SQL y procedimientos almacenados a part...

Webcam Capture es un API  que permite usar una cámara web incorporada o externa directamente desde código Java utilizand...

Herramientas

Generador de Enlaces a Whatsapp