did some stuff

This commit is contained in:
2023-01-05 05:06:19 +01:00
parent e16f0342a7
commit c4b31bc548
7 changed files with 711 additions and 42 deletions

View File

@@ -1,6 +1,6 @@
package com.bib.essensbestellungsverwaltung;
/*
@author Malte Schulze Hobeling
@author Malte Schulze Hobeling
*/
import java.io.File;
@@ -13,10 +13,10 @@ import java.util.List;
public class Database {
private static final String dbLocation = "jdbc:sqlite:"+Path.of("").toAbsolutePath()+"/database.db";
protected static void init(){
protected static boolean init(){
File db = new File(Path.of("").toAbsolutePath()+"/database.db");
try {
db.createNewFile();
return db.createNewFile();
} catch (IOException e) {
throw new RuntimeException(e);
}
@@ -44,17 +44,17 @@ public class Database {
sql[1] = """
CREATE TABLE IF NOT EXISTS food_type (
id integer PRIMARY KEY,
name text
name text UNIQUE
);""";
sql[2] = """
CREATE TABLE IF NOT EXISTS allergy (
id integer PRIMARY KEY,
name text
name text UNIQUE
);""";
sql[3] = """
CREATE TABLE IF NOT EXISTS severity (
id integer PRIMARY KEY,
severity integer
name text UNIQUE
);""";
sql[4] = """
CREATE TABLE IF NOT EXISTS user (
@@ -105,7 +105,7 @@ public class Database {
sql[10] = """
CREATE TABLE IF NOT EXISTS food (
id integer PRIMARY KEY,
name text,
name text UNIQUE,
description text,
isdessert integer,
food_typeid integer,
@@ -125,7 +125,7 @@ public class Database {
FOREIGN KEY(dessert2) REFERENCES food(id)
);""";
sql[12] = """
CREATE TABLE IF NOT EXISTS food_restrictions (
CREATE TABLE IF NOT EXISTS food_restriction (
id integer PRIMARY KEY,
foodid integer,
allergyid integer,
@@ -150,7 +150,7 @@ public class Database {
}
}
protected static void fillSampleDb(){
protected static void fillDb(){
List<String> sqls = new ArrayList<>();
sqls.add("""
INSERT OR IGNORE INTO food_type (id,name)
@@ -227,6 +227,15 @@ public class Database {
sqls.add("""
INSERT OR IGNORE INTO allergy (id,name)
VALUES('22','Konservierungsstoff');""");
sqls.add("""
INSERT OR IGNORE INTO severity (id,name)
VALUES('1','Harmlos');""");
sqls.add("""
INSERT OR IGNORE INTO severity (id,name)
VALUES('2','Warnung');""");
sqls.add("""
INSERT OR IGNORE INTO severity (id,name)
VALUES('3','Kritisch');""");
try(Connection conn = connect(); Statement stmt = conn.createStatement()){
for (String sql : sqls) {
stmt.execute(sql);
@@ -236,16 +245,65 @@ public class Database {
}
}
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);
/**
* inserts data into table and returns its id
* @param table name of the database table
* @param header String[] order should match with values
* @param values String[] order should match with header
* @return id of dataset or -1
*/
protected static long insert(String table, String[] header, String[] values){
long id = -1;
try (Connection conn = connect()){
String query = queryBuilder("exists",table,header,values);
PreparedStatement psQuery = conn.prepareStatement(query);
ResultSet rsQuery = psQuery.executeQuery();
if(rsQuery.next()){
boolean found = rsQuery.getBoolean(1);
if(!found){
String sql = queryBuilder("insert",table,header,values);
String[] rowId = {"id"};
PreparedStatement ps = conn.prepareStatement(sql,rowId);
ps.execute();
ResultSet rs = ps.getGeneratedKeys();
if(rs.next()){
id = rs.getLong(1);
}
}else{
query = queryBuilder("selectMatch",table,header,values);
psQuery = conn.prepareStatement(query);
rsQuery = psQuery.executeQuery();
if(rsQuery.next()) {
id = rsQuery.getLong(1);
}
}
}
} catch (SQLException e) {
return false;
return id;
}
return true;
return id;
}
protected static long getSingleId(String table, String[] header, String[] values){
long id = -1;
try(Connection conn = connect()){
String sql = queryBuilder("selectMatch",table,header,values);
PreparedStatement ps = conn.prepareStatement(sql);
ResultSet rs = ps.executeQuery();
if(rs.next()){
id = rs.getLong(1);
if(rs.next()){
id = -1;
}
}
}catch (SQLException e){
e.printStackTrace();
return id;
}
return id;
}
protected static void printSampleQuery(){
String sql = """
@@ -253,17 +311,17 @@ public class Database {
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();
PreparedStatement ps = conn.prepareStatement(sql);
PreparedStatement ps1 = conn.prepareStatement(sql1);
ps.setInt(1,0);
ResultSet rs = ps.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();
ps1.setInt(1,0);
rs = ps1.executeQuery();
while (rs.next()){
System.out.println("ID: " + rs.getInt("id") + ", Name: " + rs.getString("name"));
}
@@ -275,32 +333,146 @@ public class Database {
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();
try(Connection conn = connect();PreparedStatement ps = conn.prepareStatement(sql)){
ps.setInt(1,1);
ps.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();
private static String queryBuilder(String type,String table, String[] header, String[] values){
String sql;
StringBuilder sb = new StringBuilder();
switch (type){
case "exists":
sb = new StringBuilder("SELECT (count(*) > 0) as found FROM ");
sb.append(table);
sb.append(" WHERE ");
sb.append(header[0]);
sb.append(" LIKE '");
sb.append(values[0]);
sb.append("'");
for (int i = 1; i < header.length; i++){
sb.append(" AND ");
sb.append(header[i]);
sb.append(" LIKE '");
sb.append(values[i]);
sb.append("'");
}
break;
case "selectMatch":
sb = new StringBuilder("SELECT * FROM ");
sb.append(table);
sb.append(" WHERE ");
sb.append(header[0]);
sb.append(" LIKE '");
sb.append(values[0]);
sb.append("'");
for (int i = 1; i < header.length; i++){
sb.append(" AND ");
sb.append(header[i]);
sb.append(" LIKE '");
sb.append(values[i]);
sb.append("'");
}
break;
case "insert":
sb = new StringBuilder("INSERT OR IGNORE INTO ");
sb.append(table);
sb.append(" (");
sb.append(header[0]);
for(int i = 1; i < header.length; i++){
sb.append(",");
sb.append(header[i]);
}
sb.append(") VALUES('");
sb.append(values[0]);
sb.append("'");
for (int i = 1; i < values.length; i++){
sb.append(",'");
sb.append(values[i]);
sb.append("'");
}
sb.append(");");
break;
}
sql = sb.toString();
return sql;
}
protected static List<String> getTable(String table){
List<String> data = new ArrayList<>();
StringBuilder sb;
try(Connection conn = connect()) {
String sql = "SELECT * FROM " + table;
PreparedStatement ps = conn.prepareStatement(sql);
ResultSet rs = ps.executeQuery();
ResultSetMetaData rsmd = rs.getMetaData();
int count = rsmd.getColumnCount();
while (rs.next()){
System.out.println(rs.getInt("id"));
sb = new StringBuilder();
sb.append(rs.getString(1));
for(int i = 2; i <= count; i++){
sb.append(":");
sb.append(rs.getString(i));
}
data.add(sb.toString());
}
}catch (SQLException e){
return new ArrayList<>();
}
return data;
}
protected static List<String> select(String table,String[] header, String[] values){
List<String> data = new ArrayList<>();
StringBuilder sb = new StringBuilder();
String sql = queryBuilder("selectMatch",table,header,values);
try(Connection conn = connect()) {
PreparedStatement ps = conn.prepareStatement(sql);
ResultSet rs = ps.executeQuery();
ResultSetMetaData rsmd = rs.getMetaData();
int count = rsmd.getColumnCount();
while (rs.next()){
sb = new StringBuilder();
sb.append(rs.getString(1));
for(int i = 2; i <= count; i++){
sb.append(":");
sb.append(rs.getString(i));
}
data.add(sb.toString());
}
}catch (SQLException e){
e.printStackTrace();
return;
} */
return data;
}
return data;
}
protected static List<String> getEntryById(String table, long id){
List<String> data = new ArrayList<>();
StringBuilder sb;
String sql = "SELECT * FROM " + table + " WHERE id = ?;";
try (Connection conn = connect()) {
PreparedStatement ps = conn.prepareStatement(sql);
ps.setLong(1,id);
ResultSet rs = ps.executeQuery();
ResultSetMetaData rsmd = rs.getMetaData();
int count = rsmd.getColumnCount();
while (rs.next()){
sb = new StringBuilder();
sb.append(rs.getString(1));
for(int i = 2; i <= count; i++){
sb.append(":");
sb.append(rs.getString(i));
}
data.add(sb.toString());
}
} catch (SQLException e) {
e.printStackTrace();
return data;
}
return data;
}
}