Skip to content

Commit

Permalink
update[DbWrapper]: add exception-throwing to export methods
Browse files Browse the repository at this point in the history
  • Loading branch information
Lucy Ciara Herud-Thomassen authored and Lucy Ciara Herud-Thomassen committed Mar 12, 2026
1 parent fe39dd0 commit c0556a1
Show file tree
Hide file tree
Showing 3 changed files with 44 additions and 19 deletions.
9 changes: 8 additions & 1 deletion src/main/java/edu/group5/app/App.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
package edu.group5.app;

import java.util.ArrayList;
import java.util.List;

import edu.group5.app.control.wrapper.DbWrapper;

/**
Expand All @@ -10,8 +13,12 @@ public static void main(String[] args) throws InterruptedException {
DbWrapper db = new DbWrapper(false);
try {
System.out.println(db.connect());
List<Object[]> data = new ArrayList<Object[]>();
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());
}
}
}
44 changes: 31 additions & 13 deletions src/main/java/edu/group5/app/control/wrapper/DbWrapper.java
Original file line number Diff line number Diff line change
Expand Up @@ -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<Object[]> users;
private List<Object[]> donations;

public DbWrapper(boolean test) {
if (test) {
Expand All @@ -33,8 +35,8 @@ public boolean connect() throws SQLException {
return connection.isValid(0);
}

public List<Object[]> importUser() throws SQLException {
PreparedStatement ps = this.connection.prepareStatement("SELECT * FROM user");
public List<Object[]> importUsers() throws SQLException {
PreparedStatement ps = this.connection.prepareStatement("SELECT * FROM users");
ResultSet results = ps.executeQuery();
List<Object[]> data = new ArrayList<Object[]>();
while (results.next()) {
Expand All @@ -48,23 +50,31 @@ public List<Object[]> importUser() throws SQLException {
results.getString("password_hash")
});
}
return data;
this.users = data;
return this.users;
}

public int exportUser(List<Object[]> data) throws SQLException {
public int exportUsers(List<Object[]> 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();
}
Expand All @@ -87,7 +97,8 @@ public List<Object[]> importDonations(int user_id) throws SQLException {
results.getString(6)
});
}
return data;
this.donations = data;
return this.donations;
}

public int exportDonations(List<Object[]> data) throws SQLException {
Expand All @@ -97,15 +108,22 @@ public int exportDonations(List<Object[]> 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;
Expand Down
10 changes: 5 additions & 5 deletions src/main/resources/init.sql
Original file line number Diff line number Diff line change
@@ -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)
);

Expand All @@ -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)
Expand Down

0 comments on commit c0556a1

Please sign in to comment.