====== Aplicación que conecta con Base de datos. Patrón DAO ====== ===== Patrón DAO ===== public class Database { private Connection connection; public Connection getConnection() { try { Class.forName(MYSQL_DRIVER); connection = DriverManager.getConnection(MYSQL_URL, USERNAME, PASSWORD); System.out.println("Conectado!"); } catch (ClassNotFoundException cnfe) { System.out.println("No se ha podido cargar el driver de conexión. Verifique que los drivers están disponibles"); cnfe.printStackTrace(); } catch (SQLException sqle) { System.out.println("No se ha podido conectar con el servidor de base de datos. Comprueba que los datos son correctos y que el servidor se ha iniciado"); sqle.printStackTrace(); } return connection; } public void close() { try { connection.close(); } catch (SQLException sqle) { System.out.println("No se ha podido conectar con el servidor de base de datos. Comprueba que los datos son correctos y que el servidor se ha iniciado"); sqle.printStackTrace(); } } } public class BookDao { private Connection connection; public BookDao(Connection connection) { this.connection = connection; } public void add(Book book) { String sql = "INSERT INTO books (title, author, publisher) VALUES (?, ?, ?)"; try { PreparedStatement statement = connection.prepareStatement(sql); statement.setString(1, book.getTitle()); statement.setString(2, book.getAuthor()); statement.setString(3, book.getPublisher()); statement.executeUpdate(); } catch (SQLException sqle) { System.out.println("No se ha podido conectar con el servidor de base de datos. Comprueba que los datos son correctos y que el servidor se ha iniciado"); sqle.printStackTrace(); } } public boolean delete(String title) { String sql = "DELETE FROM books WHERE title = ?"; try { PreparedStatement statement = connection.prepareStatement(sql); statement.setString(1, title); int rows = statement.executeUpdate(); return rows == 1; } catch (SQLException sqle) { System.out.println("No se ha podido conectar con el servidor de base de datos. Comprueba que los datos son correctos y que el servidor se ha iniciado"); sqle.printStackTrace(); } return false; } public boolean modify(String title, Book book) { String sql = "UPDATE books SET title = ?, author = ?, publisher = ? WHERE title = ?"; try { PreparedStatement statement = connection.prepareStatement(sql); statement.setString(1, book.getTitle()); statement.setString(2, book.getAuthor()); statement.setString(3, book.getPublisher()); statement.setString(4, title); int rows = statement.executeUpdate(); return rows == 1; } catch (SQLException sqle) { System.out.println("No se ha podido conectar con el servidor de base de datos. Comprueba que los datos son correctos y que el servidor se ha iniciado"); sqle.printStackTrace(); } return false; } public ArrayList findAll() { String sql = "SELECT * FROM books ORDER BY title"; ArrayList books = new ArrayList<>(); try { PreparedStatement statement = connection.prepareStatement(sql); ResultSet resultSet = statement.executeQuery(); while (resultSet.next()) { Book book = new Book(); book.setTitle(resultSet.getString("title")); book.setAuthor(resultSet.getString("author")); book.setPublisher(resultSet.getString("publisher")); books.add(book); } } catch (SQLException sqle) { System.out.println("No se ha podido conectar con el servidor de base de datos. Comprueba que los datos son correctos y que el servidor se ha iniciado"); sqle.printStackTrace(); } return books; } public Book findByTitle(String title) { String sql = "SELECT * FROM books WHERE title = ?"; Book book = null; try { PreparedStatement statement = connection.prepareStatement(sql); statement.setString(1, title); ResultSet resultSet = statement.executeQuery(); if (resultSet.next()) { book = new Book(); book.setTitle(resultSet.getString("title")); book.setAuthor(resultSet.getString("author")); book.setPublisher(resultSet.getString("publisher")); } } catch (SQLException sqle) { System.out.println("No se ha podido conectar con el servidor de base de datos. Comprueba que los datos son correctos y que el servidor se ha iniciado"); sqle.printStackTrace(); } return book; } } ===== Librería Jdbi 3 ===== {{ jdbi.png }} ==== Creación de un DAO con Jdbi ==== @Data @RequiredArgsConstructor @AllArgsConstructor @NoArgsConstructor @ToString public class Vehicle { private int id; @NonNull private String licensePlate; @NonNull private String brand; @NonNull private String model; @NonNull private int kilometers; @NonNull private String image; @NonNull private LocalDate registrationDate; } public class Database { public static Jdbi jdbi; public static Handle db; public static void connect() { jdbi = Jdbi.create(DATABASE_URL, DATABASE_USERNAME, DATABASE_PASSWORD); jdbi.installPlugin(new SqlObjectPlugin()); db = jdbi.open(); } public static void close() { db.close(); } } public interface VehicleDAO { @SqlQuery("SELECT * FROM vehicles") @UseRowMapper(VehicleMapper.class) List getVehicles(); @SqlQuery("SELECT * FROM vehicles WHERE brand = ? OR model = ?") @UseRowMapper(VehicleMapper.class) List getVehicles(String search); @SqlQuery("SELECT * FROM vehicles WHERE brand = ? AND model = ?") @UseRowMapper(VehicleMapper.class) List getVehicles(String brand, String model); @SqlQuery("SELECT * FROM vehicles WHERE id = ?") @UseRowMapper(VehicleMapper.class) Vehicle getVehicle(int id); @SqlUpdate("INSERT INTO vehicles (license_plate, brand, model, kilometers, image, registration_date) VALUES (?, ?, ?, ?, ?, ?)") void addVehicle(String licensePlate, String brand, String model, int kilometers, String image, Date registrationDate); @SqlUpdate("DELETE FROM vehicles WHERE id = ?") void removeVehicle(int id); @SqlUpdate("UPDATE vehicles SET license_plate = ?, brand = ?, model = ?, kilometers = ?, image = ? WHERE id = ?") void editVehicle(String licensePlate, String brand, String model, int kilometers, String image, int id); @SqlUpdate("UPDATE vehicles SET license_plate = ?, brand = ?, model = ?, kilometers = ? WHERE id = ?") void editVehicle(String licensePlate, String brand, String model, int kilometers, int id); } public class VehicleMapper implements RowMapper { @Override public Vehicle map(ResultSet rs, StatementContext ctx) throws SQLException { return new Vehicle(rs.getInt("id"), rs.getString("license_plate"), rs.getString("brand"), rs.getString("model"), rs.getInt("kilometers"), rs.getString("image"), DateUtils.getLocalDate(rs.getDate("registration_date")) ); } } ---- (c) 2023 Santiago Faci