Para uitlizar SQLite en aplicaciones Java, es necesario tener instalado tanto el controlador JDBC de SQLite como el entorno Java. Si no tiene Java instalado, puede seguir las guías oficiales para su instalación. A continuación, detallaremos el proceso de configuración del controlador JDBC de SQLite.
- Descargue la versión más reciente del archivo sqlite-jdbc-(VERSION).jar desde el repositorio oficial.
- Incluya el archivo JAR descargado en el classpath de su proyecto, ya sea mediante la configuración del entorno de desarrollo o mediante el parámetro
-classpathdurante la ejecución.
Antes de proceder, es fundamental tener conocimientos básicos sobre JDBC. Si no está familiarizado con este concepto, recomendamos dedicar unos minutos a revisar los conceptos fundamentales de JDBC, lo que facilitará la comprensión del contenido que sigue.
Estableciendo Conexión con la Base de Datos
El siguiente ejemplo demuestra cómo establecer una conexión con una base de datos existente. Si la base de datos no existe, esta será creada automáticamente, devolviendo un objeto de conexión válido.
import java.sql.*;
public class GestionadorSQLite {
public static void main(String[] args) {
ConexionBD conexion = null;
try {
// Cargar el controlador JDBC
Class.forName("org.sqlite.JDBC");
// Establecer la conexión
conexion = new ConexionBD("jdbc:sqlite:datos.db");
conexion.abrirConexion();
System.out.println("Conexión establecida con éxito");
} catch (Exception e) {
System.err.println("Error: " + e.getClass().getName() + " - " + e.getMessage());
System.exit(1);
}
}
}
class ConexionBD {
private Connection conexion;
public ConexionBD(String url) {
this.conexion = null;
}
public void abrirConexion() throws SQLException {
this.conexion = DriverManager.getConnection(url);
}
public Connection getConexion() {
return this.conexion;
}
}
Para compilar y ejecutar este programa en Linux o macOS, que creará el archivo de base de datos datos.db en el directorio actual:
$ javac GestionadorSQLite.java
$ java -classpath ".:sqlite-jdbc-3.7.2.jar" GestionadorSQLite
Conexión establecida con éxito
En sistemas Windows, los comandos serían:
$ javac GestionadorSQLite.java
$ java -classpath ".;sqlite-jdbc-3.7.2.jar" GestionadorSQLite
Conexión establecida con éxito
Creación de Tablas
El siguiente código Java crea una tabla en la base de datos previamente establecida:
import java.sql.*;
public class CreadorTabla {
private static final String NOMBRE_BD = "datos.db";
private static final String NOMBRE_TABLA = "EMPLEADOS";
public static void main(String[] args) {
GestorBD gestor = new GestorBD(NOMBRE_BD);
try {
gestor.conectar();
System.out.println("Base de datos abierta con éxito");
// Crear la tabla de empleados
String sentenciaSQL = "CREATE TABLE " + NOMBRE_TABLA + " (" +
"ID INTEGER PRIMARY KEY NOT NULL," +
"NOMBRE TEXT NO NULL," +
"EDAD INTEGER NO NULL," +
"DEPARTAMENTO TEXT," +
"SUELDO REAL)";
gestor.ejecutarSentencia(sentenciaSQL);
System.out.println("Tabla creada exitosamente");
gestor.cerrarConexion();
} catch (Exception e) {
System.err.println("Error: " + e.getClass().getName() + " - " + e.getMessage());
System.exit(1);
}
}
}
class GestorBD {
private Connection conexion;
private String rutaBD;
public GestorBD(String ruta) {
this.rutaBD = ruta;
this.conexion = null;
}
public void conectar() throws SQLException, ClassNotFoundException {
Class.forName("org.sqlite.JDBC");
this.conexion = DriverManager.getConnection("jdbc:sqlite:" + this.rutaBD);
}
public void ejecutarSentencia(String sql) throws SQLException {
Statement stmt = null;
try {
stmt = this.conexion.createStatement();
stmt.executeUpdate(sql);
} finally {
if (stmt != null) {
stmt.close();
}
}
}
public void cerrarConexion() throws SQLException {
if (this.conexion != null) {
this.conexion.close();
}
}
}
Al compilar y ejecar este programa, se creará la tabla EMPLEADOS en la base de datos datos.db. Los archivos resultantes en el directorio serían:
-rw-r--r--. 1 usuario usuario 3201128 Jan 22 19:04 sqlite-jdbc-3.7.2.jar
-rw-r--r--. 1 usuario usuario 2100 May 8 05:43 CreadorTabla.class
-rw-r--r--. 1 usuario usuario 1450 May 8 05:42 CreadorTabla.java
-rw-r--r--. 1 usuario usuario 3072 May 8 05:43 datos.db
Inserción de Datos
El siguiente ejemplo muestra cómo insertar registros en la tabla EMPLEADOS creada anteriormente:
import java.sql.*;
public class IngresadorDatos {
private static final String NOMBRE_BD = "datos.db";
public static void main(String[] args) {
GestorBD gestor = new GestorBD(NOMBRE_BD);
try {
gestor.conectar();
gestor.iniciarTransaccion();
System.out.println("Base de datos abierta con éxito");
// Insertar múltiples registros
gestor.insertarEmpleado(101, "Carlos Rodríguez", 34, "Ventas", 35000.00);
gestor.insertarEmpleado(102, "Ana García", 28, "Marketing", 32000.00);
gestor.insertarEmpleado(103, "Luis Fernández", 45, "TI", 42000.00);
gestor.insertarEmpleado(104, "María López", 31, "Recursos Humanos", 38000.00);
gestor.confirmarTransaccion();
System.out.println("Registros insertados exitosamente");
gestor.cerrarConexion();
} catch (Exception e) {
try {
gestor.cancelarTransaccion();
} catch (SQLException ex) {
System.err.println("Error al cancelar transacción: " + ex.getMessage());
}
System.err.println("Error: " + e.getClass().getName() + " - " + e.getMessage());
System.exit(1);
}
}
}
class Empleado {
private int id;
private String nombre;
private int edad;
private String departamento;
private double sueldo;
public Empleado(int id, String nombre, int edad, String departamento, double sueldo) {
this.id = id;
this.nombre = nombre;
this.edad = edad;
this.departamento = departamento;
this.sueldo = sueldo;
}
// Getters
public int getId() { return id; }
public String getNombre() { return nombre; }
public int getEdad() { return edad; }
public String getDepartamento() { return departamento; }
public double getSueldo() { return sueldo; }
}
Consulta de Datos
El siguiente programa recupera y muestra los registros almacenados en la tabla EMPLEADOS:
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
public class ConsultorDatos {
private static final String NOMBRE_BD = "datos.db";
public static void main(String[] args) {
GestorBD gestor = new GestorBD(NOMBRE_BD);
List<empleado> empleados = new ArrayList<>();
try {
gestor.conectar();
System.out.println("Base de datos abierta con éxito");
// Consultar todos los empleados
ResultSet rs = gestor.ejecutarConsulta("SELECT * FROM EMPLEADOS ORDER BY NOMBRE");
while (rs.next()) {
int id = rs.getInt("id");
String nombre = rs.getString("nombre");
int edad = rs.getInt("edad");
String departamento = rs.getString("departamento");
double sueldo = rs.getDouble("sueldo");
empleados.add(new Empleado(id, nombre, edad, departamento, sueldo));
}
rs.close();
gestor.cerrarConexion();
// Mostrar resultados
System.out.println("Lista de empleados:");
for (Empleado emp : empleados) {
System.out.println("ID: " + emp.getId());
System.out.println("Nombre: " + emp.getNombre());
System.out.println("Edad: " + emp.getEdad());
System.out.println("Departamento: " + emp.getDepartamento());
System.out.println("Sueldo: " + emp.getSueldo());
System.out.println("----------------------");
}
System.out.println("Consulta realizada con éxito");
} catch (Exception e) {
System.err.println("Error: " + e.getClass().getName() + " - " + e.getMessage());
System.exit(1);
}
}
}
</empleado>
Actualización de Datos
El siguiente código actualiza un registro específico en la tabla EMPLEADOS y luego muestra los datos actualizados:
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
public class ActualizadorDatos {
private static final String NOMBRE_BD = "datos.db";
public static void main(String[] args) {
GestorBD gestor = new GestorBD(NOMBRE_BD);
try {
gestor.conectar();
gestor.iniciarTransaccion();
System.out.println("Base de datos abierta con éxito");
// Actualizar sueldo de un empleado específico
int idEmpleado = 101;
double nuevoSueldo = 38000.00;
String sentenciaUpdate = "UPDATE EMPLEADOS SET SUELDO = ? WHERE ID = ?";
PreparedStatement stmt = gestor.getConexion().prepareStatement(sentenciaUpdate);
stmt.setDouble(1, nuevoSueldo);
stmt.setInt(2, idEmpleado);
stmt.executeUpdate();
gestor.confirmarTransaccion();
// Consultar y mostrar el registro actualizado
ResultSet rs = gestor.ejecutarConsulta("SELECT * FROM EMPLEADOS WHERE ID = " + idEmpleado);
if (rs.next()) {
System.out.println("Registro actualizado:");
System.out.println("ID: " + rs.getInt("id"));
System.out.println("Nombre: " + rs.getString("nombre"));
System.out.println("Edad: " + rs.getInt("edad"));
System.out.println("Departamento: " + rs.getString("departamento"));
System.out.println("Sueldo: " + rs.getDouble("sueldo"));
}
rs.close();
gestor.cerrarConexion();
System.out.println("Operación completada con éxito");
} catch (Exception e) {
try {
gestor.cancelarTransaccion();
} catch (SQLException ex) {
System.err.println("Error al cancelar transacción: " + ex.getMessage());
}
System.err.println("Error: " + e.getClass().getName() + " - " + e.getMessage());
System.exit(1);
}
}
}
Eliminación de Datos
El siguiente ejemplo elimina un registro específico de la tabla EMPLEADOS y muestra los registros restantes:
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
public class EliminadorDatos {
private static final String NOMBRE_BD = "datos.db";
public static void main(String[] args) {
GestorBD gestor = new GestorBD(NOMBRE_BD);
try {
gestor.conectar();
gestor.iniciarTransaccion();
System.out.println("Base de datos abierta con éxito");
// Eliminar un empleado por ID
int idAEliminar = 102;
String sentenciaDelete = "DELETE FROM EMPLEADOS WHERE ID = ?";
PreparedStatement stmt = gestor.getConexion().prepareStatement(sentenciaDelete);
stmt.setInt(1, idAEliminar);
int filasAfectadas = stmt.executeUpdate();
if (filasAfectadas > 0) {
System.out.println("Empleado con ID " + idAEliminar + " eliminado exitosamente");
} else {
System.out.println("No se encontró ningún empleado con ID " + idAEliminar);
}
gestor.confirmarTransaccion();
// Mostrar todos los registros restantes
List<empleado> empleadosRestantes = gestor.obtenerTodosEmpleados();
System.out.println("Empleados restantes en la base de datos:");
for (Empleado emp : empleadosRestantes) {
System.out.println("ID: " + emp.getId() + ", Nombre: " + emp.getNombre() +
", Departamento: " + emp.getDepartamento());
}
gestor.cerrarConexion();
System.out.println("Operación completada con éxito");
} catch (Exception e) {
try {
gestor.cancelarTransaccion();
} catch (SQLException ex) {
System.err.println("Error al cancelar transacción: " + ex.getMessage());
}
System.err.println("Error: " + e.getClass().getName() + " - " + e.getMessage());
System.exit(1);
}
}
}
</empleado>