diff --git a/src/main/java/de/hsel/itech/db/AddressDB.java b/src/main/java/de/hsel/itech/db/AddressDB.java
new file mode 100644
index 0000000..7c1e18a
--- /dev/null
+++ b/src/main/java/de/hsel/itech/db/AddressDB.java
@@ -0,0 +1,115 @@
+package de.hsel.itech.db;
+
+import de.hsel.itech.db.pojo.Address;
+import de.hsel.itech.db.pojo.User;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author Johannes Theiner
+ * @version 0.1
+ * @since 0.5
+ **/
+public class AddressDB {
+
+ private Database database;
+
+ AddressDB(Database database) {
+ this.database = database;
+ }
+
+ @NotNull
+ public List
getAll(@NotNull User user) {
+ Map.Entry entry = database.getResultSetsByValue(database.tableUserAddress, "user", String.valueOf(user.getId()));
+ assert entry != null;
+
+ List list = new ArrayList<>();
+
+ try {
+ ResultSet rs = entry.getKey();
+ while(rs.next()) {
+ list.add(new Address(user, rs.getLong("id"), rs.getString("name"), rs.getString("street"), rs.getString("number"), rs.getInt("zipCode"), rs.getString("city")));
+ }
+
+ entry.getValue().close();
+ } catch (SQLException e) {
+ e.printStackTrace();
+ }
+
+ return list;
+ }
+
+ @Nullable
+ public Address get(long id) {
+ Map.Entry entry = database.getResultSetById(database.tableAddress, id);
+ assert entry != null;
+
+ try {
+ ResultSet rs = entry.getKey();
+ Address address = new Address(getUserFromId(id), id, rs.getString("name"), rs.getString("street"), rs.getString("number"), rs.getInt("zipCode"), rs.getString("city"));
+ entry.getValue().close();
+
+ return address;
+ } catch (SQLException e) {
+ e.printStackTrace();
+ }
+ return null;
+ }
+
+ @Nullable
+ private User getUserFromId(long id) {
+ Map.Entry entry = database.getResultSetByValue(database.tableUserAddress, "address", id);
+ assert entry != null;
+
+ try {
+ User user = database.user().get(entry.getKey().getLong("user"));
+ entry.getValue().close();
+ return user;
+ } catch (SQLException e) {
+ e.printStackTrace();
+ }
+ return null;
+ }
+
+
+ public int insert(@NotNull Address address) {
+
+ Connection connection = database.getConnection();
+ int updateCount = 0;
+
+ try {
+ assert connection != null;
+ PreparedStatement statement = connection.prepareStatement("INSERT INTO address (name, street, number, zipCode, city) VALUES (?, ?, ?, ?, ?)");
+ statement.setString(1, address.getName());
+ statement.setString(2, address.getStreet());
+ statement.setString(3, address.getNumber());
+ statement.setInt(4, address.getZipCode());
+ statement.setString(5, address.getCity());
+
+ updateCount += statement.executeUpdate();
+
+ PreparedStatement relationStatement = connection.prepareStatement("INSERT INTO user_address (user, address) VALUES (?, ?)");
+ relationStatement.setLong(1, address.getUser().getId());
+ relationStatement.setLong(2, address.getId());
+
+ updateCount += statement.executeUpdate();
+
+ connection.close();
+ } catch (SQLException e) {
+ e.printStackTrace();
+ }
+ return updateCount;
+ }
+
+ public int delete(@NotNull Address address) {
+ return database.delete(address.getId(), database.tableUserAddress);
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/de/hsel/itech/db/Database.java b/src/main/java/de/hsel/itech/db/Database.java
index 10f34f1..0fb4b6d 100644
--- a/src/main/java/de/hsel/itech/db/Database.java
+++ b/src/main/java/de/hsel/itech/db/Database.java
@@ -1,6 +1,7 @@
package de.hsel.itech.db;
import de.hsel.itech.config.Configuration;
+import org.jetbrains.annotations.Contract;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.json.JSONObject;
@@ -41,6 +42,7 @@ public class Database {
private CategoryDB categoryDB;
private PublisherDB publisherDB;
private UserDB userDB;
+ private AddressDB addressDB;
private static Database instance;
@@ -104,36 +106,49 @@ public class Database {
return null;
}
+ @Contract
public BookDB book() {
if(bookDB == null)
bookDB = new BookDB(this);
return bookDB;
}
+ @Contract
public AuthorDB author() {
if(authorDB == null)
authorDB = new AuthorDB(this);
return authorDB;
}
+ @Contract
public CategoryDB category() {
if (categoryDB == null)
categoryDB = new CategoryDB(this);
return categoryDB;
}
+
+ @Contract
public PublisherDB publisher() {
if(publisherDB == null)
publisherDB = new PublisherDB(this);
return publisherDB;
}
+ @Contract
public UserDB user() {
if(userDB == null)
userDB = new UserDB(this);
return userDB;
}
+ @Contract
+ public AddressDB address() {
+ if(addressDB == null)
+ addressDB = new AddressDB(this);
+ return addressDB;
+ }
+
/**
diff --git a/src/main/resources/database.sql b/src/main/resources/database.sql
index 9da8296..38d4af4 100644
--- a/src/main/resources/database.sql
+++ b/src/main/resources/database.sql
@@ -3,11 +3,11 @@ INSERT IGNORE INTO test(hello) values ('Welt');
CREATE TABLE IF NOT EXISTS book (id bigint primary key auto_increment, isbn bigint unique, title varchar(50), description varchar(500), price int, year year, publisher bigint, category bigint, image varchar(11));
CREATE TABLE IF NOT EXISTS publisher(id bigint primary key auto_increment, name varchar(50) unique);
CREATE TABLE IF NOT EXISTS author(id bigint primary key auto_increment, name varchar(50) unique);
-CREATE TABLE IF NOT EXISTS author_book(author bigint, book bigint, primary key(author, book), foreign key (author) REFERENCES author(id), foreign key (book) references book(id));
+CREATE TABLE IF NOT EXISTS author_book(author bigint, book bigint, primary key(author, book), foreign key (author) REFERENCES author(id), foreign key (book) references book(id) on delete cascade);
CREATE TABLE IF NOT EXISTS category(id bigint primary key auto_increment, name varchar(25), image varchar(11));
CREATE TABLE IF NOT EXISTS user(id bigint primary key auto_increment, name varchar(50), email varchar(255), password binary(40), type tinyint);
-CREATE TABLE IF NOT EXISTS address(id bigint primary key auto_increment, street varchar(100), number smallint, zipCode smallint, city varchar(50));
-CREATE TABLE IF NOT EXISTS user_address(id bigint primary key auto_increment, user bigint, address bigint, foreign key (user) REFERENCES user(id), foreign key (address) references address(id));
+CREATE TABLE IF NOT EXISTS address(id bigint primary key auto_increment, name varchar(100), street varchar(100), number smallint, zipCode smallint, city varchar(50));
+CREATE TABLE IF NOT EXISTS user_address(id bigint primary key auto_increment, user bigint, address bigint, foreign key (user) REFERENCES user(id), foreign key (address) references address(id) on delete cascade);
CREATE TABLE IF NOT EXISTS payment_type(id bigint primary key auto_increment, name varchar(25) unique);
INSERT IGNORE INTO payment_type (name) values ('CreditCard');
INSERT IGNORE INTO payment_type (name) values ('DebitCard');