sábado, 24 de marzo de 2012

SQLite, Java y un ejemplo practico.





Al final Link para descargar código fuente.

Voy a  un ejemplo practico de como construir una simple aplicación haciendo uso de la seudobase de datos llamada SQLite usando java, donde tomare los datos de una persona (id, primer nombre, segundo nombre, primer apellido, segundo apellido) y los guardare en la tabla Persona de la base de datos, luego los mostraré en una JTable y por ultimo eliminaré todos los elementos de la tabla persona.

Lo curioso y practico de SQLite es que usa una base de datos en forma de archivo y puede hacer consultas en ella desde una aplicación java haciendo uso de SQL y ademas no es necesario instalar un motor de base de datos como PostgreSQL por ejemplo.

Definicion de SQLite: Es un sistema de gestión de bases de datos relacional compatible con ACID, contenida en una relativamente pequeña (~275 kiB)2 biblioteca escrita en C. SQLite es un proyecto de dominio público1 creado por D. Richard Hipp. mas informacion aqui.

Como nota importante -por lo menos para nosotros- esta herramienta está disponible para Java, cabe anotar que es usada por muchos software's actualmente.

Usaremos como herramientas Netbeans, Sqliteman y SqliteJDBC para Java, todo sobre GNU/Ubuntu, pero de igual forma lo podemos hacer en Windonws ya Sqliteman esta disponible para este.

Definición de JDBC: es una API que permite la ejecución de operaciones sobre bases de datos desde el lenguaje de programación Java, independientemente del sistema operativo donde se ejecute o de la base de datos a la cual se accede, utilizando el dialecto SQL del modelo de base de datos que se utilice.

Definicion de SqlitemanUna excelente herramienta GUI para desarrolladores y administradores de bases de datos Sqlite disponible en múltiples plataformas.

Para la instalación de Sqliteman en Linux es muy fácil, ya que está presente en los repositorios de la mayoría de distribuciones, por ejemplo en GNU/Ubuntu lo podemos encontrar en 'Centro de software de Ubuntu'.

Para los que usan Windonws aquí esta el instalador de Sqliteman, clic aqui para descargar.

Para descargar el SqliteJDBC para Java, clic aqui para descargar.

Hosting
Hasta aqui asumo que tenemos conocimiento al menos básico del uso de Administradores de base de datos tradicionales como PostgreSQL, MySQL, entre otros.

Crearemos una base de datos usando Sqliteman llamada 'registro.db' muy sencilla compuesta por una tabla llamada 'Persona', así:


CREATE TABLE "Persona" (
    "id" INTEGER PRIMARY KEY,
    "primer_nombre" TEXT NOT NULL,
    "segundo_nombre" TEXT,
    "primer_apellido" TEXT NOT NULL,
    "segundo_apellido" TEXT
)


Lo que nos queda algo así:


-----------------------------------------------------------------
En Netbeans he creado un proyecto llamado ''ProyectoSQLite", y dentro tres paquetes, Operaciones, Objetos y Ventanas. 

En el paquete Operaciones (el paquete mas importante) existen dos clases, Conexion.java y Operaciones. java

En la clase Conexion.java tenemos el constructor y en ella inicializamos la variable ruta con la ruta donde se encuentra nuestro archivo base de datos.

public Conexion(){
 ruta = "/home/taniao/Escritorio/registro.db";
}

Nota: siempre debemos usar en la ruta '/' ya sea que estemos en Linux o Windows.

Finalmente para ésta clase tenemos el método conectar que como su nombre lo indica nos permitirá abrir conexión con la base de datos cada vez que la necesitemos.

try {
  Class.forName("org.sqlite.JDBC");
 }catch (ClassNotFoundException e) {
   JOptionPane.showMessageDialog(null, e.getMessage());
 }  
  try {
   conexion = DriverManager.getConnection("jdbc:sqlite:"+ruta);
   consulta = conexion.createStatement();
  }catch (SQLException e) {
  JOptionPane.showMessageDialog(null, e.getMessage());
  }
}





Por otra parte en la clase Operaciones.java tenemos dos importantes métodos, insertar y consultar; al ser básicos nos permitirán desarrollar muchas más funcionalidades en la clase Operaciones.java; para efectos de ésta pequeña explicación solo almacenaremos Personas y mostraremos un listado de las misma.

public boolean insertar(String sql){
 boolean valor = true;
  conectar();
  try {
   consulta.executeUpdate(sql);
  } catch (SQLException e) {
   valor = false;
   JOptionPane.showMessageDialog(null, e.getMessage());
  }      
  finally{  
   try{    
    consulta.close();  
    conexion.close();  
   }catch (Exception e){                 
     e.printStackTrace();  
   }  
  }
  return valor;
}

public ResultSet consultar(String sql){
 conectar();
 ResultSet resultado = null;
 try {
  resultado = consulta.executeQuery(sql);
 }catch (SQLException e) {
  JOptionPane.showMessageDialog(null, ""+e.getMessage());
 }
  return resultado;
}

----------------------------------------------
Para terminar y para que todo funcione necesitamos el JDBC llamado sqlitejdbc-v056.jar que ya descargamos (si no es aquí esta de nuevo el Link) para podernos comunicar con la base de datos.

Descomprimimos sqlitejdbc-v056.jar y dentro de éste encontramos una carpeta llamada 'org', allí es donde está toda la implementacion de sqlite; copiamos esta carpeta a nuestro proyecto junto con los tres paquete que hemos creados (OperacionesObjetos y Ventanas) y listo.

Nota: Si no queremos hacer el paso anterior podemos importar toda la librería sqlitejdbc-v056.jar usando Netbeans.
----------------------------------------------
He aquí pantallazos de la aplicación.





Como siempre deseándoles les sea de utilidad.

Para descargar codigo fuente hecho en Netbeans, clic aqui.
Para descargar la base de datos hecha en Sqliteman, clic aqui.

Hosting

Comenta acerca del código.

31 comentarios:

  1. Gracias, todo todo me funciono, con mas tiempo me pondré a analizar el codigo.

    ResponderEliminar
  2. Muchas gracias por el material. Funciona correctamente y es muy útil.

    ResponderEliminar
  3. Mil gracias por publicar el código, ya pude hacer lo que tenía en mente, nuevamente gracias ;)

    ResponderEliminar
  4. Excelente, que bien que el codigo te sea de utilidad Anonimo.

    ResponderEliminar
  5. Amigo.! estoy trabajando en Windows.! pero en la "ruta" me sale un error en Netbeans.! que puedes decirme???

    ResponderEliminar
    Respuestas
    1. Manuel, dale clic derecho en la base de datos sqlite y luego en propiedades, alli te aparece la ruta, usar esa que te muestra.

      recuerda que debes usar el /

      Intenta y me cuentas

      Eliminar
  6. Juan Pablo Restrepo

    Mil gracias me sirvio demaciado .

    ResponderEliminar
  7. muy interesante, lo que publicaste, bueno a mi me interesaria profundizar en manejar su jdbc, muy buena publicacion.

    ResponderEliminar
  8. Gracias, muy práctica tu explicación, voy a investigar como actualizar la ruta dinamicamente para que el usuario pueda instalar la aplicación en la carpeta que elija.
    gracias nuevamente.

    Alex

    ResponderEliminar
  9. a esta aplicacion yo la modifique para mi programa, pero siempre que boy a insertar datos, la sentencia try nuca me daja, me dice erro;null, verifique

    ResponderEliminar
    Respuestas
    1. yo modifique el metodo incertar y agrega mas metodos de ellos, cuando intento incertarlos me sale ese error no se si sea por que incerte datos numerios desde java o porque no puese esos datos entre comillas ya que mi programa tiene esos tipos datos en la base de datos

      Eliminar
    2. mas esactamente el codigo me quedo asi
      public void guardarCaja(Caja caja) {
      insertar("insert into Caja values("
      + caja.getNum_caja()
      + ",'" + caja.getActivo() + "')");
      }

      Eliminar
    3. Asumo que tu tabla en la base de datos solo tiene dos campos, de no ser así debes plantear nuevamente la sentencia sql.

      si caja.getNum_caja() no es un numero usa comilla simple ''

      intenta y cuéntame como te fue...

      Eliminar
    4. yo lo puse asi
      public void guardarCaja(Caja caja) {
      insertar("insert into Caja values("
      + caja.getNum_caja()
      + "," + caja.getActivo()
      + ")");
      }
      y me sale el mismo error, deje de usar '

      Eliminar
    5. Revisa si al momento de enviar el objeto de tipo Caja este llega como null, para esto al inicio del método coloca la linea system.out.println(caja.getNum_caja()+"").

      Tambien muestrame el scrip de la tabla

      Eliminar
    6. no esta llegando bacio, me sale los numeros que entro

      Eliminar
    7. aca esta lo que escribii dentro del try
      int a = Integer.parseInt(numnero_de_caja_jf.getText()), b = Integer.parseInt(saldo_inicial_jf.getText());
      Caja caja = new Caja(a, b);
      operaciones.guardarCaja(caja);

      Eliminar
    8. Mandame el codigo fuente y la base de datos al correo resalpa84@gmail.com y reviso.

      Eliminar
    9. hay le mando el proyecto, mi correo es segioko@hotmail.com

      Eliminar
  10. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  11. Justo lo que estaba buscando y muy útil este sencillo ejemplo.
    ¡Muchas gracias!

    ResponderEliminar

Entrada destacada

Matriz de adyacencia para un grafo

"La matriz de adyacencia es una matriz cuadrada que se utiliza como una forma de representar relaciones binarias."; aunque pa...