Skip to main content

Overview

The DB_EnterpriseHSQLDB class is a complete enterprise database management system using HSQLDB. It provides a menu-driven interface for managing employees, departments, and centers with full CRUD (Create, Read, Update, Delete) operations.

Class Information

Class
public class
DB_EnterpriseHSQLDBJDBC Driver: org.hsqldb.jdbc.JDBCDriver

Database Constants

URL
String
required
Database connection URL (loaded from config.ini)
private static String URL;
Default format: jdbc:hsqldb:file:{database.path};shutdown=true;hsqldb.lock_file=false
USER
String
default:"SA"
Database username constant
private static final String USER = "SA";
PASSWORD
String
default:""
Database password (empty by default)
private static final String PASSWORD = "";

Main Method

Signature

public static void main(String[] args)

Workflow

Class.forName("org.hsqldb.jdbc.JDBCDriver");

Core Methods

cargarConfiguracion()

private static void cargarConfiguracion() throws IOException
Purpose
Loads or creates the database configuration file (config.ini)
  • Creates config.ini if it doesn’t exist
  • Default property: database.path = ./db_empresa
  • Constructs JDBC URL with shutdown and lock file settings
String dbPath = properties.getProperty("database.path", "./db_empresa");
URL = "jdbc:hsqldb:file:" + dbPath + ";shutdown=true;hsqldb.lock_file=false";

inicializarBaseDatos()

public static void inicializarBaseDatos()
Purpose
Initializes the database by checking if tables exist and creating the schema if needed
DatabaseMetaData meta = conn.getMetaData();
ResultSet tables = meta.getTables(null, null, "T_CENTROS", null);

if (!tables.next()) {
    System.out.println("Creando base de datos...");
    crearEsquemaCompleto(conn);
} else {
    System.out.println("Base de datos ya existe.");
}

crearEsquemaCompleto()

public static void crearEsquemaCompleto(Connection conn) throws SQLException
conn
Connection
required
Active database connection
Tables Created
  • t_centros - Work centers/locations
  • t_departamentos - Departments with foreign key to centers
  • t_empleados - Employees with foreign key to departments
CREATE TABLE t_centros (
    codigo_centro INTEGER PRIMARY KEY,
    nombre_centro VARCHAR(21) NOT NULL,
    ubicacion VARCHAR(50) NOT NULL
)
private static void menuPrincipal()
Menu Options
  1. Ver empleados
  2. Agregar empleado
  3. Buscar empleados
  4. Ver departamentos
  5. Eliminar empleado
  6. Información completa con JOINs
  7. Salir

CRUD Operations

verEmpleados()

private static void verEmpleados()
String sql = "SELECT e.*, d.nombre_departamento FROM t_empleados e " +
             "JOIN t_departamentos d ON e.codigo_departamento = d.codigo_departamento";
Displays: Employee ID, Name, Department, Salary, and Hire Date

agregarEmpleado()

private static void agregarEmpleado()
User Input
Interactive
  • Código (Employee ID)
  • Departamento (Department ID)
  • Nombre (Name)
  • Salario (Salary)
  • Fecha ingreso (Hire Date in YYYY-MM-DD format)
String sql = "INSERT INTO t_empleados (codigo_empleado, codigo_departamento, " +
            "extension_telefonica_empleado, fecha_nacimiento_empleado, " +
            "fecha_ingreso_empleado, salario_base_empleado, comision_empleado, " +
            "numero_hijos_empleado, nombre_empleado) VALUES (?, ?, 100, '1990-01-01', ?, ?, 0, 0, ?)";

pstmt.setInt(1, codigo);
pstmt.setInt(2, depto);
pstmt.setString(3, fecha);
pstmt.setDouble(4, salario);
pstmt.setString(5, nombre);
pstmt.executeUpdate();

buscarEmpleados()

private static void buscarEmpleados()
Partial name matching using LIKE operator
String sql = "SELECT * FROM t_empleados WHERE nombre_empleado LIKE ?";
pstmt.setString(1, "%" + nombre + "%");

verDepartamentos()

private static void verDepartamentos()
Displays
Department ID, Name, and Budget for all departments

eliminarEmpleado()

private static void eliminarEmpleado()
codigo
int
required
Employee code to delete
String sql = "DELETE FROM t_empleados WHERE codigo_empleado = ?";
ps.setInt(1, codigo);
int filasAfectadas = ps.executeUpdate();

if (filasAfectadas > 0) {
    System.out.println("Empleado eliminado correctamente");
} else {
    System.out.println("No se encontró el empleado con ese código");
}

informacionCompletaJoins()

private static void informacionCompletaJoins()
Purpose
Displays complete employee information with department and center data using JOINs
String sql = "SELECT " +
            "e.codigo_empleado, " +
            "e.nombre_empleado, " +
            "e.salario_base_empleado, " +
            "e.fecha_ingreso_empleado, " +
            "d.nombre_departamento, " +
            "d.presupuesto_departamento, " +
            "c.nombre_centro, " +
            "c.ubicacion " +
            "FROM t_empleados e " +
            "JOIN t_departamentos d ON e.codigo_departamento = d.codigo_departamento " +
            "JOIN t_centros c ON d.codigo_centro = c.codigo_centro " +
            "ORDER BY e.codigo_empleado";
Shows: Employee details, Department name and budget, Center name and location

Sample Data

The schema includes initial data:
  • Code 10: SEDE CENTRAL (C/ ALCALA, 820, MADRID)
  • Code 20: RELACION CON CLIENTES (C/ ATOCHA, 405, MADRID)
  • 100: DIRECCION GENERAL
  • 110: DIRECCION COMERCIAL
  • 111: SECTOR INDUSTRIAL
  • 112: SECTOR SERVICIOS
  • 120: ORGANIZACION
  • 121: PERSONAL
  • 122: PROCESO DE DATOS
  • 130: FINANZAS
Six employees with complete data including:
  • PONS, CESAR (Code: 110)
  • LASA, MARIO (Code: 120)
  • TEROL, LUCIANO (Code: 130)
  • PEREZ, JULIO (Code: 150)
  • AGUIRRE, AUREO (Code: 160)
  • PEREZ, MARCOS (Code: 180)

Error Handling

catch (SQLException e) {
    System.out.println("Error: " + e.getMessage());
}
catch (Exception e) {
    System.out.println("Error: " + e.getMessage());
    e.printStackTrace();
}

Build docs developers (and LLMs) love