es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo insertar y devolver una instancia de Empleado (patrón DAO)

En el método save() recibo como entrada una instancia de Employee, y quiero agregarla a la tabla employee y devolver esta instancia agregada. He leído sobre este problema pero no encontré una respuesta a mi problema.

public Employee save(Employee employee) throws SQLException {
    Connection connection = ConnectionSource.instance().createConnection();
    String sql = "insert into employee VALUES(" +employee.getId() + ", '" + 
                employee.getFullName().getFirstName() + "', '" +
                employee.getFullName().getLastName() + "', '" +
                employee.getFullName().getMiddleName() + "', '" +
                employee.getPosition() + "', '" +
                employee.getHired() + "', " +
                employee.getSalary() + ", " +
                employee.getManagerId() + ", " +
                employee.getDepartmentId() + ")";
    connection.prepareStatement(sql);

    PreparedStatement ps2 = connection.prepareStatement("select * from employee");

    ResultSet resultSet = ps2.executeQuery();
    resultSet.next();
    Employee emp = new Employee(... );

    return emp;
}
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Solución:

    Para agregar la instancia Empleado a la tabla employee y devolver la instancia agregada, debes seguir estos pasos:

    1. Modifica la consulta SQL INSERT utilizando marcadores de posición ‘?’ para los valores y utilizando los métodos PreparedStatement#setXXX() para establecer los valores de los marcadores de posición a las propiedades correspondientes de la instancia employee.
    String sql = "INSERT INTO employee VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)";
    PreparedStatement ps = connection.prepareStatement(sql);
    
    ps.setInt(1, employee.getId());
    ps.setString(2, employee.getFullName().getFirstName());
    ps.setString(3, employee.getFullName().getLastName());
    ps.setString(4, employee.getFullName().getMiddleName());
    ps.setString(5, employee.getPosition());
    ps.setDate(6, employee.getHired());
    ps.setDouble(7, employee.getSalary());
    ps.setInt(8, employee.getManagerId());
    ps.setInt(9, employee.getDepartmentId());
    
    ps.executeUpdate();
    
    1. Después de ejecutar la consulta INSERT, puedes obtener la instancia Empleado agregada ejecutando una consulta SELECT con una cláusula WHERE basada en el valor id del employee.
    PreparedStatement ps2 = connection.prepareStatement("SELECT * FROM employee WHERE id = ?");
    ps2.setInt(1, employee.getId());
    ResultSet resultSet = ps2.executeQuery();
    
    if (resultSet.next()) {
        Employee emp = new Employee(
            resultSet.getInt("id"),
            new FullName(resultSet.getString("first_name"), resultSet.getString("last_name"), resultSet.getString("middle_name")),
            resultSet.getString("position"),
            resultSet.getDate("hired"),
            resultSet.getDouble("salary"),
            resultSet.getInt("manager_id"),
            resultSet.getInt("department_id")
        );
        return emp;
    } else {
        throw new SQLException("Fallo al recuperar la instancia de Empleado agregada");
    }
    
    1. En caso de una excepción, debes cerrar los objetos PreparedStatement y Connection para liberar los recursos.
    } catch (SQLException e) {
        throw e;
    } finally {
        try {
            if (ps != null) ps.close();
            if (ps2 != null) ps2.close();
            if (connection != null) connection.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    

Comments are closed.