Trabajando con SQLite en Java

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.

  1. Descargue la versión más reciente del archivo sqlite-jdbc-(VERSION).jar desde el repositorio oficial.
  2. 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 -classpath durante 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>

Etiquetas: SQLite JDBC java Base de Datos

Publicado el 6-2 00:55