package javacity;

import java.io.FileInputStream;
import java.sql.*;

public class DBS {
    String host = "mysql.lima-city.de";
    String dbname = "db_109358_2";
    String nutzer = "USER109358";
    String passwort = "stab360";
    String port = "3306";
    private static Connection verb;
    private static Statement sql;
    private static PreparedStatement psql;

    public boolean init() {
        try {
            Class.forName("com.mysql.jdbc.Driver").newInstance();
            verb = DriverManager.getConnection(
                    "jdbc:mysql://" + host + ":" + port + "/" + dbname + "?user=" + nutzer + "&password=" + passwort + "&lc_type=utf8&useUnicode=true&connectionCollation=utf8_unicode_ci&characterSetResults=utf8");
            sql = verb.createStatement();
            System.out.println("Verbunden.");
            return true;
        } catch (Exception ex) {
            System.out.println("Verbindung fehlgeschlagen...");
            return false;
        }
    }

    public boolean ende() {
        try {
            verb.close();
            verb = null;
            sql = null;
            return true;
        } catch (SQLException ex) {
            System.out.println("Verbindung konnte nicht beendet werden...");
            return false;
        }
    }

    public boolean verbunden() {
        if (verb != null || sql != null) {
            return true;
        } else {
            return false;
        }
    }

    public static ResultSet abfrage(String sqlAnfrage) {
        try {
            System.out.println("Abfrage: " + sqlAnfrage);
            if (sqlAnfrage.substring(0,4).equals("UPDA") || sqlAnfrage.substring(0,4).equals("INSE") || sqlAnfrage.substring(0,4).equals("DELE")) {
                System.out.println("Abfrage: executeUPDATE()");
                sql.executeUpdate(sqlAnfrage);
            } else {
                System.out.println("Abfrage: execute()");
                sql.execute(sqlAnfrage);
            }
            System.out.println("Abfrage ausgeführt...");
            return sql.getResultSet();
        } catch (SQLException ex) {
            System.out.println("Query NICHT erfolgreich ausgeführt...");
            return null;
        }
    }

    public static String ersterString(String spalte, String tabelle, String bedingung) {
        ResultSet erg = abfrage("SELECT " + spalte + " FROM bs_" + tabelle + " WHERE " + bedingung);
        try  {
            erg.next();
            //System.out.println("ersterString: next()");
            String str = erg.getString(spalte);
            //System.out.println("ersterString: " + str);
            return str;
        } catch (SQLException ex) {
            //System.out.println("ersterString-Fehler: " + ex);
            return ex.getMessage();
        }
    }

    public static int ersterInt(String spalte, String tabelle, String bedingung) {
        ResultSet erg = abfrage("SELECT " + spalte + " FROM bs_" + tabelle + " WHERE " + bedingung);
        try  {
            erg.next();
            //System.out.println("ersterInt: next()");
            int integer = erg.getInt(spalte);
            //System.out.println("ersterInt: " + integer);
            return integer;
        } catch (SQLException ex) {
            //System.out.println("ersterInteger-Fehler: " + ex);
            return 0;
        }
    }
    
    public static String[] sqlarray(String spalte, String tabelle, String bedingung) {
        int anzahl = ersterInt("COUNT(*)", tabelle, bedingung);
        System.out.println("Anzahl: " + anzahl);
        ResultSet erg = abfrage("SELECT " + spalte + " FROM bs_" + tabelle + " WHERE " + bedingung);
        String[] daten = new String[anzahl];
        int zaehler = 0;
        try {
            while (erg.next()) {
                daten[zaehler] = erg.getString(spalte);
                System.out.println(zaehler + ": " + daten[zaehler]);
                zaehler++;
            }
        } catch (SQLException ex) {

        }
        return daten;
    }

    public static String datum(Timestamp t) {
        String d = t.toString();
        return d.substring(8, 10) + "." + d.substring(5, 7) + "." + d.substring(0, 4) + " um " + d.substring(11, 19);
    }

    public static void bin(FileInputStream datei) throws SQLException {
        psql = verb.prepareStatement("INSERT INTO bs_Programm (PID, Titel, Beschreibung, Status, Freigabe, Datei, TID) VALUES (NULL, 'Es funktioniert!', '1253', '2', '3', ?, 1)");
        psql.setBlob(1, datei);
        System.out.println(psql);
        psql.executeUpdate();
    }
}
