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');