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:
- Crear una BD,
- Definir sus tablas y cargar campos
- Exportar a SQL, HTML o XML
- 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/