Guía práctica de introducción básica a JDBC Programación Orientada a Objetos Universidad Autónoma de Manizales Instalar SQLite Descargar el paquete que corresponda con la versión binaria (Precompiled Binaries) de la plataforma deseada: Linux, MacOSX o Windows desde la siguiente ubicación. http://sqlite.org/download.html Descomprimir el paquete recién descargado en una ubicación conocida. Ubicar la aplicación sqlite3.exe (sqlite3 en Linux/MacOSX) en una ruta bajo el PATH (o actualice esta variable). Crear la base de datos Abrir una consola del sistema operativo y ubíquese en el directorio del proyecto. Por ejemplo: $ mkdir ~/poo/proyecto $ cd ~/poo/proyecto Crear un archivo de texto con las sentencias SQL para crear la base de datos. $ vi schema_sqlite.sql CREATE TABLE producto ( codigo nombre precio vencimiento INTEGER PRIMARY KEY VARCHAR(50) FLOAT DATE NOT NULL, NOT NULL, NOT NULL, ); INSERT INTO producto (nombre, precio, vencimiento) VALUES ('Papitas', 500, '2012-05-18'); INSERT INTO producto (nombre, precio, vencimiento) VALUES ('Gaseosa', 1200, '2012-08-20'); INSERT INTO producto (nombre, precio, vencimiento) VALUES ('Jugo de naranja', 2000, '2012-12-24'); Ejecutar las sentencias SQL de schema_sqlite.sql para crear la nueva base de datos. $ sqlite3 basededatos.db < schema_sqlite.sql Descargar el driver JDBC para SQLite Descargar la versión mas reciente del driver JDBC para SQLite de la siguiente ubicación. http://www.xerial.org/maven/repository/artifact/org/xerial/sqlite-jdbc/ Crear un proyecto en Netbeans Crear un nuevo proyecto de tipo Java Application. Incluir la referencia del driver JDBC Hacer clic derecho sobre el proyecto en Netbeans y elegir la opción Properties. Seleccionar la opción Libraries en la columna izquierda de las categorías. Presione el botón Add JAR/Folder en el lado izquierdo. Seleccione el archivo .jar del driver descargado en el paso anterior. Este archivo deberá mantenerse en esa ubicación ya que es referenciado de manera externa por el proyecto de Netbeans. Importar las librerías de acceso a bases de datos import java.sql.*; import java.util.Date; Cargar la clase del driver JDBC try { Class.forName("org.sqlite.JDBC"); } catch (ClassNotFoundException ex) { System.err.println("ERROR: no fue posible cargar el driver JDBC"); System.exit(1); } Establecer la conexión con la base de datos Por efectos de la demostración toda la interacción se va a realizar en un unico punto en el main, en una aplicación real esto no sucede así. Por este motivo se deberá crear una estructura de try/catch para las siguientes secciones. Connection connection = null; try { // Sección #1 } catch(SQLException e) { System.err.println("ERROR ejecutando las consultas SQL: " + e.getMessage()); } finally { // Sección #2 } El código dispuesto en las secciones a continuación se deberá agregar en la sección #1 hasta que se notifique algo diferente. Para establecer la conexión con la base de datos SQLite se utilizan la siguientes líneas de código. connection = DriverManager.getConnection("jdbc:sqlite:ruta/basededatos.db"); Statement statement = connection.createStatement(); statement.setQueryTimeout(30); // segundos En esta sección se realizan las siguientes tareas. 1. Obtener el objeto Connection que permite interactuar con la base de datos. 2. Obtener el objeto Statement de la Connection para construír y ejecutar las sentencias. 3. Asignar un tiempo máximo de espera (timeout) para la ejecución de las consultas (opcional). Agregar registros a una tabla String sql = "INSERT INTO producto (nombre, precio, vencimiento) " + "VALUES ('Galletas', 800, '2012-04-12');"; int control = statement.executeUpdate(sql); System.out.println("Ejecutando INSERT: respuesta = " + control); La ejecución de sentencias INSERT, al igual que UPDATE y DELETE, se realiza con el método executeUpdate del Statement. Este método retorna un valor entero que representa el número de registros afectados por la sentencia DML. Remover registros de una tabla sql = "DELETE FROM producto WHERE codigo = 1"; control = statement.executeUpdate(sql); System.out.println("Ejecutando DELETE: respuesta = " + control); Actualizar registros de una tabla sql = "UPDATE producto SET precio = 999 WHERE codigo = 4"; control = statement.executeUpdate(sql); System.out.println("Ejecutando UPDATE: respuesta = " + control); Obtener información de una tabla Para obtener información de una tabla se utiliza la sentencia SELECT de SQL. Para transmitirla al motor de bases de datos se utiliza el método executeQuery de la clase Statement el cual retorna un conjunto de resultados (ResultSet) el cual puede ser navegado para recuperar los registros del resultado. ResultSet rs = statement.executeQuery("SELECT * FROM producto ORDER BY nombre"); while(rs.next()) { int codigo String nombre float precio Date vencimiento = = = = rs.getInt("codigo"); rs.getString("nombre"); rs.getFloat("precio"); rs.getDate("vencimiento"); System.out.println("Codigo: " + codigo); System.out.println("Nombre: " + nombre); System.out.println("Precio: " + precio); System.out.println("Fecha : " + vencimiento); } Terminar la conexión a la base de datos Una vez terminadas las operaciones contra la base de datos es necesario cerrar su conexión. El siguiente código se debe agregar en la sección #2. try { if(connection != null) connection.close(); } catch(SQLException e) { System.err.println("ERROR cerrando la conexión: " + e.getMessage()); } Ejercicio Implementar la aplicación descrita en esta guía, ejecutarla varias veces y analizar los resultados obtenidos.