diff --git a/src/main/java/com/bib/essensbestellungsverwaltung/Database.java b/src/main/java/com/bib/essensbestellungsverwaltung/Database.java new file mode 100644 index 0000000..35ef73a --- /dev/null +++ b/src/main/java/com/bib/essensbestellungsverwaltung/Database.java @@ -0,0 +1,306 @@ +package com.bib.essensbestellungsverwaltung; +/** + * @author Malte Schulze Hobeling + */ + +import java.io.File; +import java.io.IOException; +import java.nio.file.Path; +import java.sql.*; +import java.util.ArrayList; +import java.util.List; + + +public class Database { + private static final String dbLocation = "jdbc:sqlite:"+Path.of("").toAbsolutePath()+"/database.db"; + protected static void init(){ + File db = new File(Path.of("").toAbsolutePath()+"/database.db"); + try { + db.createNewFile(); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + protected static Connection connect(){ + Connection conn = null; + try{ + conn = DriverManager.getConnection(dbLocation); + }catch (SQLException e){ + e.printStackTrace(); + } + return conn; + } + + protected static void createDb(){ + String[] sql = new String[14]; + sql[0] = """ + CREATE TABLE IF NOT EXISTS address ( + id integer PRIMARY KEY, + street text, + number text, + plz text, + city text + );"""; + sql[1] = """ + CREATE TABLE IF NOT EXISTS food_type ( + id integer PRIMARY KEY, + name text + );"""; + sql[2] = """ + CREATE TABLE IF NOT EXISTS allergy ( + id integer PRIMARY KEY, + name text + );"""; + sql[3] = """ + CREATE TABLE IF NOT EXISTS severity ( + id integer PRIMARY KEY, + severity integer + );"""; + sql[4] = """ + CREATE TABLE IF NOT EXISTS user ( + id integer PRIMARY KEY, + name text, + firstname text, + addressid integer, + password text, + email text UNIQUE, + FOREIGN KEY(addressid) REFERENCES address(id) + );"""; + sql[5] = """ + CREATE TABLE IF NOT EXISTS child ( + id integer PRIMARY KEY, + name text, + firstname text, + addressid integer, + FOREIGN KEY(addressid) REFERENCES address(id) + );"""; + sql[6] = """ + CREATE TABLE IF NOT EXISTS worker ( + userid integer PRIMARY KEY, + FOREIGN KEY(userid) REFERENCES user(id) + );"""; + sql[7] = """ + CREATE TABLE IF NOT EXISTS parent ( + userid integer PRIMARY KEY, + FOREIGN KEY(userid) REFERENCES user(id) + );"""; + sql[8] = """ + CREATE TABLE IF NOT EXISTS parent_child ( + id integer PRIMARY KEY, + parentuserid integer, + childid integer, + FOREIGN KEY(parentuserid) REFERENCES parent(userid), + FOREIGN KEY(childid) REFERENCES child(id) + );"""; + sql[9] = """ + CREATE TABLE IF NOT EXISTS child_allergy ( + id integer PRIMARY KEY, + childid integer, + allergyid integer, + severityid integer, + FOREIGN KEY(childid) REFERENCES child(id), + FOREIGN KEY(allergyid) REFERENCES allergy(id), + FOREIGN KEY(severityid) REFERENCES severity(id) + );"""; + sql[10] = """ + CREATE TABLE IF NOT EXISTS food ( + id integer PRIMARY KEY, + name text, + description text, + isdessert integer, + food_typeid integer, + FOREIGN KEY(food_typeid) REFERENCES food_type(id) + );"""; + sql[11] = """ + CREATE TABLE IF NOT EXISTS food_plan ( + id integer PRIMARY KEY, + date text, + food1 integer, + food2 integer, + dessert1 integer, + dessert2 integer, + FOREIGN KEY(food1) REFERENCES food(id), + FOREIGN KEY(food2) REFERENCES food(id), + FOREIGN KEY(dessert1) REFERENCES food(id), + FOREIGN KEY(dessert2) REFERENCES food(id) + );"""; + sql[12] = """ + CREATE TABLE IF NOT EXISTS food_restrictions ( + id integer PRIMARY KEY, + foodid integer, + allergyid integer, + FOREIGN KEY(foodid) REFERENCES food(id), + FOREIGN KEY(allergyid) REFERENCES allergy(id) + );"""; + sql[13] = """ + CREATE TABLE IF NOT EXISTS food_selection ( + id integer PRIMARY KEY, + childid integer, + food_planid integer, + selection integer, + FOREIGN KEY(childid) REFERENCES child(id), + FOREIGN KEY(food_planid) REFERENCES food_plan(id) + );"""; + try(Connection conn = connect(); Statement stmt = conn.createStatement()){ + for(int i = 0; i < sql.length; i++){ + stmt.execute(sql[i]); + } + } catch (SQLException e) { + e.printStackTrace(); + } + } + + protected static void fillSampleDb(){ + List sqls = new ArrayList<>(); + sqls.add(""" + INSERT OR IGNORE INTO food_type (id,name) + VALUES ('1','Vegan');"""); + sqls.add(""" + INSERT OR IGNORE INTO food_type (id,name) + VALUES ('2','Vegetarisch');"""); + sqls.add(""" + INSERT OR IGNORE INTO food_type (id,name) + VALUES ('3','Fleischhaltig');"""); + sqls.add(""" + INSERT OR IGNORE INTO allergy (id,name) + VALUES('1','Eier');"""); + sqls.add(""" + INSERT OR IGNORE INTO allergy (id,name) + VALUES('2','Soja');"""); + sqls.add(""" + INSERT OR IGNORE INTO allergy (id,name) + VALUES('3','Milch');"""); + sqls.add(""" + INSERT OR IGNORE INTO allergy (id,name) + VALUES('4','Erdnüsse');"""); + sqls.add(""" + INSERT OR IGNORE INTO allergy (id,name) + VALUES('5','Weichtiere');"""); + sqls.add(""" + INSERT OR IGNORE INTO allergy (id,name) + VALUES('6','Krebstiere');"""); + sqls.add(""" + INSERT OR IGNORE INTO allergy (id,name) + VALUES('7','Getreide');"""); + sqls.add(""" + INSERT OR IGNORE INTO allergy (id,name) + VALUES('8','Senf');"""); + sqls.add(""" + INSERT OR IGNORE INTO allergy (id,name) + VALUES('9','Sesam');"""); + sqls.add(""" + INSERT OR IGNORE INTO allergy (id,name) + VALUES('10','Schwefeldioxid und Sulfit');"""); + sqls.add(""" + INSERT OR IGNORE INTO allergy (id,name) + VALUES('11','Nüsse');"""); + sqls.add(""" + INSERT OR IGNORE INTO allergy (id,name) + VALUES('12','Sellerie');"""); + sqls.add(""" + INSERT OR IGNORE INTO allergy (id,name) + VALUES('13','Fische');"""); + sqls.add(""" + INSERT OR IGNORE INTO allergy (id,name) + VALUES('14','Lupinen');"""); + sqls.add(""" + INSERT OR IGNORE INTO allergy (id,name) + VALUES('15','Nitrit-Pökelsalz');"""); + sqls.add(""" + INSERT OR IGNORE INTO allergy (id,name) + VALUES('16','Phosphat');"""); + sqls.add(""" + INSERT OR IGNORE INTO allergy (id,name) + VALUES('17','Nitrat');"""); + sqls.add(""" + INSERT OR IGNORE INTO allergy (id,name) + VALUES('18','Antioxidationsmittel');"""); + sqls.add(""" + INSERT OR IGNORE INTO allergy (id,name) + VALUES('19','Farbstoff');"""); + sqls.add(""" + INSERT OR IGNORE INTO allergy (id,name) + VALUES('20','Geschmacksverstärker');"""); + sqls.add(""" + INSERT OR IGNORE INTO allergy (id,name) + VALUES('21','Süßungsmittel');"""); + sqls.add(""" + INSERT OR IGNORE INTO allergy (id,name) + VALUES('22','Konservierungsstoff');"""); + try(Connection conn = connect(); Statement stmt = conn.createStatement()){ + for (String sql : sqls) { + stmt.execute(sql); + } + }catch (SQLException e){ + e.printStackTrace(); + } + } + + protected static boolean insert(String table, String header, String values){ + try (Connection conn = connect(); Statement stmt = conn.createStatement()){ + String sql = "INSERT OR IGNORE INTO " + table + " (" + header + ") VALUES(" + values + ");"; + stmt.execute(sql); + } catch (SQLException e) { + return false; + } + return true; + } + + + protected static void printSampleQuery(){ + String sql = """ + SELECT * FROM food_type WHERE id > ?;"""; + String sql1 = """ + SELECT * FROM allergy WHERE id > ?;"""; + try(Connection conn = connect()){ + PreparedStatement pstmt = conn.prepareStatement(sql); + PreparedStatement pstmt1 = conn.prepareStatement(sql1); + pstmt.setInt(1,0); + ResultSet rs = pstmt.executeQuery(); + System.out.println("food_type"); + while (rs.next()){ + System.out.println("ID: " + rs.getInt("id") + ", Name: " + rs.getString("name")); + } + System.out.println("allergy"); + pstmt1.setInt(1,0); + rs = pstmt1.executeQuery(); + while (rs.next()){ + System.out.println("ID: " + rs.getInt("id") + ", Name: " + rs.getString("name")); + } + }catch (SQLException e){ + e.printStackTrace(); + } + } + + protected static void deleteSample(){ + String sql = """ + DELETE FROM user WHERE id = ?;"""; + try(Connection conn = connect();PreparedStatement pstmt = conn.prepareStatement(sql)){ + pstmt.setInt(1,1); + pstmt.executeUpdate(); + }catch (SQLException e){ + e.printStackTrace(); + } + } + + /* String sql = """ + CREATE TABLE IF NOT EXISTS user ( + id integer PRIMARY KEY, + name text);"""; + String sql2 = "SELECT * FROM user WHERE id > ?"; + String sql3 = "INSERT INTO user (id,name) VALUES (1,'test1')"; + try(Connection conn = connect(); + Statement stmt = conn.createStatement()){ + stmt.execute(sql); + stmt.execute(sql3); + PreparedStatement pstmt = conn.prepareStatement(sql2); + pstmt.setInt(1,0); + ResultSet rs = pstmt.executeQuery(); + while (rs.next()){ + System.out.println(rs.getInt("id")); + } + }catch (SQLException e){ + e.printStackTrace(); + return; + } */ +} diff --git a/src/main/java/com/bib/essensbestellungsverwaltung/HelloApplication.java b/src/main/java/com/bib/essensbestellungsverwaltung/HelloApplication.java index 163a374..cb64c3a 100644 --- a/src/main/java/com/bib/essensbestellungsverwaltung/HelloApplication.java +++ b/src/main/java/com/bib/essensbestellungsverwaltung/HelloApplication.java @@ -6,10 +6,8 @@ import javafx.scene.Scene; import javafx.stage.Stage; import java.io.IOException; -import java.sql.*; public class HelloApplication extends Application { - private static final String dbLocation = "jdbc:sqlite:"+HelloApplication.class.getResource("database/database.db"); @Override public void start(Stage stage) throws IOException { FXMLLoader fxmlLoader = new FXMLLoader(HelloApplication.class.getResource("hello-view.fxml")); @@ -20,36 +18,11 @@ public class HelloApplication extends Application { } public static void main(String[] args) { -/* String sql = """ - CREATE TABLE IF NOT EXISTS user ( - id integer PRIMARY KEY, - name text);"""; - String sql2 = "SELECT * FROM user WHERE id > ?"; - String sql3 = "INSERT INTO user (id,name) VALUES (1,'test1')"; - try(Connection conn = connect(); - Statement stmt = conn.createStatement()){ - stmt.execute(sql); - stmt.execute(sql3); - PreparedStatement pstmt = conn.prepareStatement(sql2); - pstmt.setInt(1,0); - ResultSet rs = pstmt.executeQuery(); - while (rs.next()){ - System.out.println(rs.getInt("id")); - } - }catch (SQLException e){ - e.printStackTrace(); - return; - } */ + Database.init(); + Database.createDb(); + Database.fillSampleDb(); + Database.printSampleQuery(); + //Database.deleteSample(); launch(); } - - private static Connection connect(){ - Connection conn = null; - try{ - conn = DriverManager.getConnection(dbLocation); - }catch (SQLException e){ - e.printStackTrace(); - } - return conn; - } } \ No newline at end of file diff --git a/src/main/resources/com/bib/essensbestellungsverwaltung/database/database.db b/src/main/resources/com/bib/essensbestellungsverwaltung/database/database.db deleted file mode 100644 index e69de29..0000000