SQLite en JAVA con JDBC

Bueno esta vez pude hacer andar algo que desde hace tiempo tenia ganas, y lo más loco es que no me llevo tiempo ni nada: anduvo perfecto (salvo por un error humano jajajaa).

Bueno la motivación para usar SQLite en JAVA es que nos permite tener una Estructura Eficiente y Flexible sin que nos preocupemos por diseñar alguna por nuestra cuenta, y no dependamos de un Servidor de SQL (local o remoto) en el momento de trabajar con los datos.

SQLite ha crecido mucho, es una libreria escrita en C que permite almacenar enormes cantidades de datos, en su versión 3 permite almacenar una BD de 2 Teras!!,  y es compatible con SQL 92. Lo usan muchas Empresas de Software dedicadas a Mobiles y otras en general: Mozila (para Firefox), Symbian (SO para Moviles),  Open Office,  Android (Sistema Movil de Google), etc…

Y bueno arranque bajándome el Driver JDBC para SQLite desde aca. Luego me bajé un administrador de SQLite (SQLite Studio) sencillo pero completo para un uso regular, que nos permita:

  1. Crear una BD,
  2. Definir sus tablas  y cargar campos
  3. Exportar a SQL, HTML o XML
  4. Opcionalmente ejecutar SQL

Todos estos requisitos, con una interfaz entendible, actualizado y multiplataforma los cumplio SQLite Studio. Bájenselo es gratis ;) .

Ejecutar con: ./Documents/sqlitestudio-2.0.5.bin

Lo usé para crear una BD sencilla (principal.db) que tuviera una única tabla “persona” que tuviera los campos:  Id (clave primaria y  autoincremental), nombre, apellido y descripción. Todos String, salvo Id declarado como Integer. Cargue unas personas, y fui al Eclipse a configurarlo.

En el Eclipse agregue al Proyecto el Driver (.jar),  haciendo ultimo boton del mouse en el proyecto y selecionando: Build Path > Add Library > User Library , y me dio opciones para cargar el jar y ponerle un nombre a la librería. En NetBeans: Clic derecho en el proyecto > Properties > Libraries > Add JAR/Folder y seleccionar el archivo sqlitejdbc-v056.jar, que no podrá ser movido a otra ruta luego de este paso.


Una vez hecho esto coloque la DB en el proyecto asi le queda local, osea  en el directorio donde se ejecuta, y escribí un ejemplo que permite agregar una Persona (pidiendo los datos con JOptionPane.showInputDialog()) y luego lista todo en Consola. En NetBeans que así: /home/roby/NetBeansProjects/JavaApplication1/principal.db.

Aca se los dejo:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import javax.swing.JOptionPane;

public class Main {
	public static void main(String[] args){
		try {
			Class.forName("org.sqlite.JDBC");
		}
		catch (ClassNotFoundException e) {
			System.out.println(e.getMessage());
		}

		try {
			Connection conexion = DriverManager.getConnection("jdbc:sqlite:principal.db");
			Statement consulta = conexion.createStatement();

			// Pedimos Los datos para una Nueva Persona via Dialogs
			String nombre,apellido,descripcion;

			nombre= JOptionPane.showInputDialog(null,"Nombre","Nueva Persona",JOptionPane.NO_OPTION);
			apellido= JOptionPane.showInputDialog(null,"Apellido","Nueva Persona",JOptionPane.NO_OPTION);
			descripcion= JOptionPane.showInputDialog(null,"Descripcion","Nueva Persona",JOptionPane.NO_OPTION);

			consulta.executeUpdate("insert into persona values(null,'"+nombre+"', '"+apellido+"', '"+descripcion+"');");

			// Visualizamos todos los registros
			ResultSet resultado = consulta.executeQuery("select * from persona;");

			System.out.println("Id\tNombre\tApellido\tDescripcion");
			while (resultado.next()) {
				System.out.println(
					resultado.getInt(1)+"\t"+
					resultado.getString("nombre") + "\t"+
					resultado.getString("Apellido")+"\t\t"+
					resultado.getString("Descripcion")
				);
			}

			//Cerramos las conexiones
			consulta.close();
			resultado.close();
			conexion.close();			

		} catch (SQLException e) {
			System.out.println(e.getMessage());
			System.out.println("Estado:"+e.getSQLState());
		}
	}
}

Que tras ejecutarse, y dependiendo de que completen, muestra algo asi:

Id	Nombre	Apellido	Descripcion
1	Alberto	Castro		Ejemplo
2	Pepe	Fernandez	Segunda Persona ;)
3	Diego	Torres		Musico
7	Persona	Nueva		Nueva Persona jejejee

Asi que esto motiva a escribir aplicaciones que simplemente usen SQL todo el tiempo, que no es algo dificil pero sí implica saber modelar bien. Si llegan a modelar así usando SQL piensen que el día de mañana pueden migrar de db guardado en su PC a un Servidor Remoto, y del programa solo tendrian que cambiar la URL de conexion y llamar al Driver apropiado (MySQL, Microsoft SQL Server, etc…), algo que motiva aun más su uso.

Ah, algunos errores que pueden saltar con respecto a la Conexion, más espcificamente a la URL, son:

  • opening db: ‘ruta a la db‘ permiso denegado,  ó bien
  • No se puede acceder a la Tabla X,

Ambas significan que definimos mal la URL y apuntamos a cualquier lado, lo cual (en mi caso) genera un archivo .db en el lugar “apuntado”.  En Linux por ejemplo una url completa seria algo asi:  “jdbc:sqlite:/home/TU_USUARIO/base.db” con esto no tuve problemas, aunque en el ejemplo que muestro  yo la usaba local al proyecto.

Fuente | http://www.vagobit.com.ar/2010/05/20/sqlite-en-java-con-jdbc/

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: