From c0556a13d480ce1e02d628ef5ce38c7aec09d9d2 Mon Sep 17 00:00:00 2001 From: Lucy Ciara Herud-Thomassen <86323303+LucyCiara@users.noreply.github.com> Date: Thu, 12 Mar 2026 14:46:30 +0100 Subject: [PATCH] update[DbWrapper]: add exception-throwing to export methods --- src/main/java/edu/group5/app/App.java | 9 +++- .../group5/app/control/wrapper/DbWrapper.java | 44 +++++++++++++------ src/main/resources/init.sql | 10 ++--- 3 files changed, 44 insertions(+), 19 deletions(-) diff --git a/src/main/java/edu/group5/app/App.java b/src/main/java/edu/group5/app/App.java index 1eba2e5..1f76250 100644 --- a/src/main/java/edu/group5/app/App.java +++ b/src/main/java/edu/group5/app/App.java @@ -1,5 +1,8 @@ package edu.group5.app; +import java.util.ArrayList; +import java.util.List; + import edu.group5.app.control.wrapper.DbWrapper; /** @@ -10,8 +13,12 @@ public static void main(String[] args) throws InterruptedException { DbWrapper db = new DbWrapper(false); try { System.out.println(db.connect()); + List data = new ArrayList(); + data.add(new Object[] { 2, 4, "Bernt", "Berntson", "berntberntson123@outlook.com", "wawawa" }); + System.out.println(db.importUsers().toString()); + System.out.println(db.exportUsers(data)); } catch (Exception e) { - e.getMessage(); + System.out.println(e.getMessage()); } } } diff --git a/src/main/java/edu/group5/app/control/wrapper/DbWrapper.java b/src/main/java/edu/group5/app/control/wrapper/DbWrapper.java index 6eb673f..b546c63 100644 --- a/src/main/java/edu/group5/app/control/wrapper/DbWrapper.java +++ b/src/main/java/edu/group5/app/control/wrapper/DbWrapper.java @@ -15,6 +15,8 @@ public class DbWrapper { private static final String CONNECTION_TYPE = "jdbc:h2:"; private static final String DB_SCRIPT = "INIT=RUNSCRIPT FROM 'classpath:"; private String connectionString; + private List users; + private List donations; public DbWrapper(boolean test) { if (test) { @@ -33,8 +35,8 @@ public boolean connect() throws SQLException { return connection.isValid(0); } - public List importUser() throws SQLException { - PreparedStatement ps = this.connection.prepareStatement("SELECT * FROM user"); + public List importUsers() throws SQLException { + PreparedStatement ps = this.connection.prepareStatement("SELECT * FROM users"); ResultSet results = ps.executeQuery(); List data = new ArrayList(); while (results.next()) { @@ -48,23 +50,31 @@ public List importUser() throws SQLException { results.getString("password_hash") }); } - return data; + this.users = data; + return this.users; } - public int exportUser(List data) throws SQLException { + public int exportUsers(List data) throws SQLException { if (data == null) { throw new IllegalArgumentException("data can't be null"); } if (data.get(0).length != 6) { throw new IllegalArgumentException("data's arrays must have a length of 6"); } + if ((int) data.getLast()[0] <= (int) this.users.getLast()[0]) { + throw new IllegalArgumentException("data can't contain existing rows"); + } int rowsAffected = 0; PreparedStatement ps = this.connection.prepareStatement( - "INSERT INTO user (user_id, role, first_name, last_name, email, password_hash) VALUES (?, ?, ?, ?, ?, ?)"); + "INSERT INTO users (user_id, role, first_name, last_name, email, password_hash) VALUES (?, ?, ?, ?, ?, ?)"); for (Object[] row : data) { - ps.setInt(1, (int) row[0]); - for (int i = 1; i < row.length; i++) { - ps.setString(i + 1, (String) row[i]); + try { + ps.setInt(1, (int) row[0]); + for (int i = 1; i < row.length; i++) { + ps.setString(i + 1, (String) row[i]); + } + } catch (Exception e) { + throw new IllegalArgumentException("One or more rows in data contains a wrong datatype"); } rowsAffected = ps.executeUpdate(); } @@ -87,7 +97,8 @@ public List importDonations(int user_id) throws SQLException { results.getString(6) }); } - return data; + this.donations = data; + return this.donations; } public int exportDonations(List data) throws SQLException { @@ -97,15 +108,22 @@ public int exportDonations(List data) throws SQLException { if (data.get(0).length == 6) { throw new IllegalArgumentException("data's arrays must have a length of 6"); } + if ((int) data.getLast()[0] <= (int) this.donations.getLast()[0]) { + throw new IllegalArgumentException("data can't contain existing rows"); + } int rowsAffected = 0; PreparedStatement ps = this.connection.prepareStatement( "INSERT INTO donations (donation_id, user_id, organization_id, amount, dating, payment_method) VALUES (?, ?, ?, ?, ?, ?)"); for (Object[] row : data) { - for (int i = 0; i < 3; i++) { - ps.setInt(i + 1, (int) row[i]); + try { + for (int i = 0; i < 3; i++) { + ps.setInt(i + 1, (int) row[i]); + } + ps.setBigDecimal(4, (BigDecimal) row[3]); + ps.setTimestamp(5, (Timestamp) row[4]); + } catch (Exception e) { + throw new IllegalArgumentException("One or more rows in data contains a wrong datatype"); } - ps.setBigDecimal(4, (BigDecimal) row[3]); - ps.setTimestamp(5, (Timestamp) row[4]); rowsAffected = ps.executeUpdate(); } return rowsAffected; diff --git a/src/main/resources/init.sql b/src/main/resources/init.sql index 90e8421..26a48d6 100644 --- a/src/main/resources/init.sql +++ b/src/main/resources/init.sql @@ -1,10 +1,10 @@ CREATE TABLE IF NOT EXISTS users ( user_id INT PRIMARY KEY, - role VARCHAR(20), - first_name VARCHAR(20), - last_name VARCHAR(20), - email VARCHAR(20), + role VARCHAR(32), + first_name VARCHAR(32), + last_name VARCHAR(32), + email VARCHAR(32), password_hash VARCHAR(72) ); @@ -15,7 +15,7 @@ donations ( organization_id INT NOT NULL, amount DECIMAL NOT NULL, dating TIMESTAMP NOT NULL, - payment_method VARCHAR(20), + payment_method VARCHAR(32), CONSTRAINT fk_user FOREIGN KEY (user_id) REFERENCES users(user_id)