package paquete.dao; import paquete.model.Entidad; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; import java.util.logging.Level; import java.util.logging.Logger; /** * Define el Data Access Object para comunicación con la base de datos para las * operaciones relativas a Entidad. No contempla transacciones. */ public class EntidadDao { // URL para el acceso a la base de datos. private static final String DB_URL = "jdbc:derby://localhost:1527/NombreDB;user=usuario;password=password"; /** * Obtiene todas las entidades de la base de datos. * @return Lista de entidades. * @throws ClassNotFoundException */ public List findAll() throws ClassNotFoundException { Connection con = null; List result = new ArrayList<>(); try { Class.forName("org.apache.derby.jdbc.ClientDriver"); con = DriverManager.getConnection(DB_URL); PreparedStatement stmt = con.prepareStatement("select * from Entidades"); ResultSet rs = stmt.executeQuery(); // Se recorre el conjunto de resultados para añadir la información a // una instancia de entidad que se guardará en la lista. while(rs.next()) { result.add(new Entidad(rs.getInt("id"), rs.getString("nombre"))); } } catch (SQLException ex) { // Añade al log el error y devuelve una lista vacía. Logger.getLogger(EntidadDao.class.getName()).log(Level.SEVERE, null, ex); } finally { // Se intenta cerrar la conexión. try { if(con != null && !con.isClosed()) con.close(); } catch (SQLException ex) { Logger.getLogger(EntidadDao.class.getName()).log(Level.WARNING, null, ex); } } return result; } /** * Añade una nueva entidad a la base de datos. * @param entidad entidad que se añadirá. * @throws ClassNotFoundException */ public void insert(Entidad entidad) throws ClassNotFoundException { Connection con = null; try { Class.forName("org.apache.derby.jdbc.ClientDriver"); con = DriverManager.getConnection(DB_URL); try (PreparedStatement stmt = con.prepareStatement("insert into entidades(id, nombre) values(?,?)")) { stmt.setInt(1, entidad.getId()); stmt.setString(2, entidad.getNombre()); stmt.executeUpdate(); } } catch (SQLException ex) { Logger.getLogger(EntidadDao.class.getName()).log(Level.SEVERE, ex.getSQLState(), ex); throw new RuntimeException(ex.getMessage()); } finally { try { if(con != null && !con.isClosed()) con.close(); } catch (SQLException ex) { Logger.getLogger(EntidadDao.class.getName()).log(Level.WARNING, null, ex); } } } /** * Actualiza una entidad de la base de datos. * @param entidad entidad que se actualizará. * @throws ClassNotFoundException */ public void update(Entidad entidad) throws ClassNotFoundException { Connection con = null; try { Class.forName("org.apache.derby.jdbc.ClientDriver"); con = DriverManager.getConnection(DB_URL); try (PreparedStatement stmt = con.prepareStatement("update entidades set nombre = ? where id = ?")) { stmt.setString(1, entidad.getNombre()); stmt.setInt(2, entidad.getId()); stmt.executeUpdate(); } } catch (SQLException ex) { Logger.getLogger(EntidadDao.class.getName()).log(Level.SEVERE, ex.getSQLState(), ex); throw new RuntimeException(ex.getMessage()); } finally { try { if(con != null && !con.isClosed()) con.close(); } catch (SQLException ex) { Logger.getLogger(EntidadDao.class.getName()).log(Level.WARNING, null, ex); } } } /** * Borra una entidad de la base de datos. * @param entidad entidad que se borrará. * @throws ClassNotFoundException */ public void delete(Entidad entidad) throws ClassNotFoundException { Connection con = null; try { Class.forName("org.apache.derby.jdbc.ClientDriver"); con = DriverManager.getConnection(DB_URL); try (PreparedStatement stmt = con.prepareStatement("delete from entidades where id = ?")) { stmt.setInt(1, entidad.getId()); stmt.executeUpdate(); } } catch (SQLException ex) { Logger.getLogger(EntidadDao.class.getName()).log(Level.SEVERE, ex.getSQLState(), ex); throw new RuntimeException(ex.getMessage()); } finally { try { if(con != null && !con.isClosed()) con.close(); } catch (SQLException ex) { Logger.getLogger(EntidadDao.class.getName()).log(Level.WARNING, null, ex); } } } }