2018-03-29 19:45:41 +02:00
package application ;
2018-03-29 19:51:34 +02:00
import java.sql.Connection ;
import java.sql.DriverManager ;
import java.sql.PreparedStatement ;
2018-03-29 19:45:41 +02:00
import java.sql.ResultSet ;
2018-03-29 19:51:34 +02:00
import java.sql.SQLException ;
2018-03-29 19:45:41 +02:00
import java.sql.Statement ;
import java.util.ArrayList ;
import java.io.File ;
import java.io.FileInputStream ;
2018-03-29 19:51:34 +02:00
class DBController
{
private Connection connection ;
2018-03-29 19:45:41 +02:00
2018-03-29 19:51:34 +02:00
private String DB_PATH_Linux = System . getProperty ( " user.home " )
2018-03-31 23:50:17 +02:00
+ " /bin/jFxKasse/ " ;
2018-03-29 19:51:34 +02:00
2018-03-31 23:50:17 +02:00
public String dbname ;
2018-03-29 19:45:41 +02:00
private Main main ;
2018-03-29 19:51:34 +02:00
// private Cryption crypo = new Cryption();
private String schluessel ; // Für Ver-/Entschlüsselung
2018-03-31 23:50:17 +02:00
boolean databasepresent = false ;
2018-03-29 19:51:34 +02:00
public void main ( )
{
2018-03-29 19:45:41 +02:00
try {
2018-03-29 19:51:34 +02:00
connection = DriverManager
2018-03-31 23:50:17 +02:00
. getConnection ( " jdbc:sqlite: " + DB_PATH_Linux + dbname + " .db " ) ;
2018-03-29 19:45:41 +02:00
} catch ( SQLException e ) {
// TODO Auto-generated catch block
e . printStackTrace ( ) ;
}
2018-03-29 19:51:34 +02:00
}
DBController ( Main main )
{
2018-03-29 19:45:41 +02:00
this . main = main ;
2018-03-29 19:51:34 +02:00
}
public void verbindeDatenbank ( )
{ // Verbinde mit der Datenbank-Datei
2018-03-31 23:50:17 +02:00
System . out . println ( " Verbinde ... DB name: " + dbname ) ;
2018-03-29 19:51:34 +02:00
try {
if ( connection ! = null )
return ;
2018-03-31 23:50:17 +02:00
connection = DriverManager . getConnection ( " jdbc:sqlite: " + DB_PATH_Linux + dbname + " .db " ) ;
2018-03-29 19:51:34 +02:00
if ( ! connection . isClosed ( ) )
2018-03-31 23:50:17 +02:00
System . out . println ( " DB Datei-Verbindung erstellt " ) ;
2018-03-29 19:51:34 +02:00
} catch ( SQLException e ) {
throw new RuntimeException ( e ) ;
}
Runtime . getRuntime ( ) . addShutdownHook ( new Thread ( ) {
public void run ( )
{
try {
if ( ! connection . isClosed ( ) & & connection ! = null ) {
connection . close ( ) ;
if ( connection . isClosed ( ) )
System . out . println ( ) ;
}
} catch ( SQLException e ) {
e . printStackTrace ( ) ;
}
}
} ) ;
}
2018-04-02 15:07:58 +02:00
public void fuellenPositionen ( int pID , String pName , float pValue ,
String pColor )
2018-03-29 19:51:34 +02:00
{ // Neuen Eintrag erstellen
2018-04-02 15:07:58 +02:00
System . out . println ( " Erstelle neuen positionen eintrag " ) ;
2018-03-29 19:51:34 +02:00
try {
PreparedStatement ps = connection . prepareStatement (
2018-04-02 15:07:58 +02:00
" INSERT INTO positionen VALUES (?, ?, ?, ?); " ) ;
2018-03-29 19:51:34 +02:00
ps . setInt ( 1 , pID ) ; // Primärschlässel
2018-04-02 15:07:58 +02:00
ps . setString ( 2 , pName ) ;
ps . setFloat ( 3 , pValue ) ;
ps . setString ( 4 , pColor ) ;
2018-03-29 19:45:41 +02:00
ps . addBatch ( ) ;
2018-03-29 19:51:34 +02:00
connection . setAutoCommit ( false ) ;
ps . executeBatch ( ) ; // SQL ausführen
connection . setAutoCommit ( true ) ;
// connection.close();
} catch ( SQLException e ) {
System . err . println ( " Couldn't handle DB-Query " ) ;
e . printStackTrace ( ) ;
}
2018-03-29 19:45:41 +02:00
}
2018-03-29 19:51:34 +02:00
2018-03-31 23:50:17 +02:00
public void erstelleTabellePositionen ( )
2018-03-29 19:51:34 +02:00
{ // Erstelle Tabelle mit Reihen
2018-03-31 23:50:17 +02:00
System . out . println ( " Erstelle Tabelle Positionen " ) ;
2018-03-29 19:51:34 +02:00
try {
Statement stmt = connection . createStatement ( ) ;
2018-03-31 23:50:17 +02:00
stmt . executeUpdate ( " DROP TABLE IF EXISTS positionen; " ) ;
2018-03-29 19:51:34 +02:00
stmt . executeUpdate (
2018-03-31 23:50:17 +02:00
" CREATE TABLE positionen (id, name, value, color); " ) ;
} catch ( SQLException e ) {
System . err . println ( " Couldn't handle DB-Query " ) ;
e . printStackTrace ( ) ;
}
2018-04-02 15:07:58 +02:00
for ( int i = 0 ; i < 25 ; i + + ) {
fuellenPositionen ( i + 1 , " Noch frei " , ( float ) 0 . 00 , " #FAF0E6 " ) ;
}
2018-03-31 23:50:17 +02:00
}
public void erstelleTabelleJobs ( )
{ // Erstelle Tabelle mit Reihen
System . out . println ( " Erstelle Tabelle Jobs " ) ;
try {
Statement stmt = connection . createStatement ( ) ;
stmt . executeUpdate ( " DROP TABLE IF EXISTS jobs; " ) ;
stmt . executeUpdate (
" CREATE TABLE jobs (id, time, positionen, state, value); " ) ;
2018-03-29 19:51:34 +02:00
} catch ( SQLException e ) {
System . err . println ( " Couldn't handle DB-Query " ) ;
e . printStackTrace ( ) ;
}
2018-03-29 19:45:41 +02:00
}
2018-03-29 19:51:34 +02:00
public boolean existiertDatenbank ( String pPfad )
{ // Prüft ob die Datenbank existiert
2018-03-29 19:45:41 +02:00
File varTmpDir = new File ( pPfad ) ;
2018-03-29 19:51:34 +02:00
if ( ! varTmpDir . exists ( ) ) {
2018-03-29 19:45:41 +02:00
return false ;
2018-03-29 19:51:34 +02:00
} else {
2018-03-29 19:45:41 +02:00
return true ;
}
}
2018-03-29 19:51:34 +02:00
2018-04-02 15:07:58 +02:00
public void ausgebenSysoPositionen ( )
{ // Debugging Ausgabe der kompletten Tabelle
System . out . println ( " Print positionen " ) ;
2018-03-29 19:51:34 +02:00
try {
Statement stmt = connection . createStatement ( ) ;
2018-04-02 15:07:58 +02:00
ResultSet rs = stmt . executeQuery ( " SELECT * FROM positionen; " ) ;
2018-03-29 19:51:34 +02:00
while ( rs . next ( ) ) {
2018-04-02 15:07:58 +02:00
System . out . println ( " id = " + rs . getString ( " id " ) ) ;
System . out . println ( " name = " + rs . getString ( " name " ) ) ;
System . out . println ( " vale = " + rs . getString ( " value " ) ) ;
System . out . println ( " color = " + rs . getString ( " color " ) ) ;
2018-03-29 19:45:41 +02:00
System . out . println ( " " ) ;
2018-03-29 19:51:34 +02:00
}
2018-03-29 19:45:41 +02:00
2018-03-29 19:51:34 +02:00
} catch ( SQLException e ) {
System . err . println ( " Couldn't handle DB-Query " ) ;
e . printStackTrace ( ) ;
}
2018-03-29 19:45:41 +02:00
}
2018-03-29 19:51:34 +02:00
2018-04-02 15:07:58 +02:00
public String getName ( int pID )
2018-03-29 19:51:34 +02:00
{ // Gibt das Datum zurück
try {
Statement stmt = connection . createStatement ( ) ;
ResultSet rs = stmt . executeQuery (
2018-04-02 15:07:58 +02:00
" SELECT id, name FROM positionen WHERE id = " + pID + " ; " ) ;
return rs . getString ( " name " ) ;
2018-03-29 19:51:34 +02:00
} catch ( SQLException e ) {
System . err . println ( " Couldn't handle DB-Query " ) ;
e . printStackTrace ( ) ;
2018-03-29 19:45:41 +02:00
return " Error 404 " ;
2018-03-29 19:51:34 +02:00
}
2018-03-29 19:45:41 +02:00
}
2018-03-29 19:51:34 +02:00
2018-04-02 15:07:58 +02:00
public String getValue ( int pID )
2018-03-29 19:51:34 +02:00
{ // Gibt das Konto zurück
try {
Statement stmt = connection . createStatement ( ) ;
ResultSet rs = stmt . executeQuery (
2018-04-02 15:07:58 +02:00
" SELECT id, value FROM positionen WHERE id = " + pID + " ; " ) ;
return rs . getString ( " value " ) ;
2018-03-29 19:51:34 +02:00
} catch ( SQLException e ) {
System . err . println ( " Couldn't handle DB-Query " ) ;
e . printStackTrace ( ) ;
2018-03-29 19:45:41 +02:00
return " Error 404 " ;
2018-03-29 19:51:34 +02:00
}
2018-03-29 19:45:41 +02:00
}
2018-03-29 19:51:34 +02:00
2018-04-02 15:07:58 +02:00
public String getColor ( int pID )
2018-03-29 19:51:34 +02:00
{ // Gibt den Nutzernamen zurück
try {
Statement stmt = connection . createStatement ( ) ;
ResultSet rs = stmt . executeQuery (
2018-04-02 15:07:58 +02:00
" SELECT id, color FROM positionen WHERE id = " + pID + " ; " ) ;
return rs . getString ( " color " ) ;
2018-03-29 19:51:34 +02:00
} catch ( SQLException e ) {
System . err . println ( " Couldn't handle DB-Query " ) ;
e . printStackTrace ( ) ;
2018-03-29 19:45:41 +02:00
return " Error 404 " ;
2018-03-29 19:51:34 +02:00
}
2018-03-29 19:45:41 +02:00
}
2018-03-29 19:51:34 +02:00
public String getEmail ( int pID )
{ // Gibt die Email zurück
try {
Statement stmt = connection . createStatement ( ) ;
ResultSet rs = stmt . executeQuery (
" SELECT id, email FROM konten WHERE id = " + pID + " ; " ) ;
return rs . getString ( " email " ) ;
} catch ( SQLException e ) {
System . err . println ( " Couldn't handle DB-Query " ) ;
e . printStackTrace ( ) ;
2018-03-29 19:45:41 +02:00
return " Error 404 " ;
2018-03-29 19:51:34 +02:00
}
2018-03-29 19:45:41 +02:00
}
2018-03-29 19:51:34 +02:00
public String getPasswort ( int pID )
{ // Gibt das Passwort zurück
try {
Statement stmt = connection . createStatement ( ) ;
ResultSet rs = stmt . executeQuery (
" SELECT id, passwort FROM konten WHERE id = " + pID + " ; " ) ;
return rs . getString ( " passwort " ) ;
} catch ( SQLException e ) {
System . err . println ( " Couldn't handle DB-Query " ) ;
e . printStackTrace ( ) ;
2018-03-29 19:45:41 +02:00
return " Error 404 " ;
2018-03-29 19:51:34 +02:00
}
2018-03-29 19:45:41 +02:00
}
2018-04-02 15:07:58 +02:00
public void setName ( int pID , String pName )
2018-03-29 19:51:34 +02:00
{ // Setzt das Datum
try {
Statement stmt = connection . createStatement ( ) ;
2018-04-02 15:07:58 +02:00
stmt . executeUpdate ( " UPDATE positionen SET name = ' " + pName
2018-03-29 19:51:34 +02:00
+ " 'WHERE id = " + pID + " ; " ) ;
} catch ( SQLException e ) {
System . err . println ( " Couldn't handle DB-Query " ) ;
e . printStackTrace ( ) ;
}
2018-03-29 19:45:41 +02:00
}
2018-04-02 15:07:58 +02:00
public void setValue ( int pID , String pValue )
2018-03-29 19:51:34 +02:00
{ // Setzt das Konto
try {
Statement stmt = connection . createStatement ( ) ;
2018-04-02 15:07:58 +02:00
stmt . executeUpdate ( " UPDATE positionen SET value = ' " + pValue
2018-03-29 19:51:34 +02:00
+ " 'WHERE id = " + pID + " ; " ) ;
} catch ( SQLException e ) {
System . err . println ( " Couldn't handle DB-Query " ) ;
e . printStackTrace ( ) ;
}
2018-03-29 19:45:41 +02:00
}
2018-04-02 15:07:58 +02:00
public void setColor ( int pID , String pColor )
2018-03-29 19:51:34 +02:00
{ // Setzt den Nutzername
try {
Statement stmt = connection . createStatement ( ) ;
2018-04-02 15:07:58 +02:00
stmt . executeUpdate ( " UPDATE positionen SET color = ' " + pColor
2018-03-29 19:51:34 +02:00
+ " 'WHERE id = " + pID + " ; " ) ;
} catch ( SQLException e ) {
System . err . println ( " Couldn't handle DB-Query " ) ;
e . printStackTrace ( ) ;
}
2018-03-29 19:45:41 +02:00
}
2018-03-29 19:51:34 +02:00
public void setEmail ( int pID , String pEmail )
{ // Setzt die Email
try {
Statement stmt = connection . createStatement ( ) ;
stmt . executeUpdate ( " UPDATE konten SET email = ' " + pEmail
+ " 'WHERE id = " + pID + " ; " ) ;
} catch ( SQLException e ) {
System . err . println ( " Couldn't handle DB-Query " ) ;
e . printStackTrace ( ) ;
}
2018-03-29 19:45:41 +02:00
}
2018-03-29 19:51:34 +02:00
public void setPasswort ( int pID , String pPasswort )
{ // Setzt das Passwort
try {
Statement stmt = connection . createStatement ( ) ;
stmt . executeUpdate ( " UPDATE konten SET passwort = ' " + pPasswort
+ " 'WHERE id = " + pID + " ; " ) ;
} catch ( SQLException e ) {
System . err . println ( " Couldn't handle DB-Query " ) ;
e . printStackTrace ( ) ;
}
2018-03-29 19:45:41 +02:00
}
2018-03-29 19:51:34 +02:00
public void loeschenEintrag ( int pID )
{ // Löscht den Eintrag
int alteOrdnung = getNeueID ( ) ; // Speichert die ID des letzten Eintrags
2018-03-29 19:45:41 +02:00
try {
2018-03-29 19:51:34 +02:00
if ( pID = = getNeueID ( ) - 1 ) { // Falls letzter Eintrag gelöscht werden
// soll
PreparedStatement ps = connection
. prepareStatement ( " DELETE FROM konten WHERE id=? " ) ;
2018-03-29 19:45:41 +02:00
ps . setInt ( 1 , pID ) ;
ps . executeUpdate ( ) ;
2018-03-29 19:51:34 +02:00
} else { // Wenn ein Eintrag in mitten der DB gelöscht wird, dann wird
// hochkopiert
while ( ! ( pID + 1 = = alteOrdnung - 1 ) ) {
2018-03-29 19:45:41 +02:00
int pIDneu = pID + 1 ;
2018-03-29 19:51:34 +02:00
Statement stmt = connection . createStatement ( ) ;
ResultSet rs = stmt . executeQuery (
" SELECT id, datum, konto, nutzername, email, passwort FROM konten WHERE id = "
+ pIDneu + " ; " ) ;
2018-03-29 19:45:41 +02:00
String pDatum = rs . getString ( " datum " ) ;
String pKonto = rs . getString ( " konto " ) ;
String pNutzername = rs . getString ( " nutzername " ) ;
2018-03-29 19:51:34 +02:00
String pEmail = rs . getString ( " email " ) ;
String pPasswort = rs . getString ( " passwort " ) ;
2018-03-29 19:45:41 +02:00
2018-03-29 19:51:34 +02:00
stmt . executeUpdate ( " UPDATE konten SET datum = ' " + pDatum
+ " ', konto = ' " + pKonto + " ', nutzername = ' "
+ pNutzername + " ', email = ' " + pEmail + " ', passwort = ' "
+ pPasswort + " 'WHERE id = " + pID + " ; " ) ;
2018-03-29 19:45:41 +02:00
pID = pID + 1 ;
}
2018-03-29 19:51:34 +02:00
PreparedStatement ps = connection
. prepareStatement ( " DELETE FROM konten WHERE id=? " ) ;
ps . setInt ( 1 , alteOrdnung - 1 ) ;
2018-03-29 19:45:41 +02:00
ps . executeUpdate ( ) ;
}
2018-03-29 19:51:34 +02:00
} catch ( SQLException e ) {
System . err . println ( " Couldn't handle DB-Query " ) ;
e . printStackTrace ( ) ;
}
2018-03-29 19:45:41 +02:00
}
2018-03-29 19:51:34 +02:00
public int getNeueID ( )
{ // Gibt die ID des nächsten Eintrags zurück
2018-03-29 19:45:41 +02:00
int neueID = 0 ;
2018-03-29 19:51:34 +02:00
try {
Statement stmt = connection . createStatement ( ) ;
ResultSet rs = stmt . executeQuery ( " SELECT * FROM konten; " ) ;
while ( rs . next ( ) ) {
2018-03-29 19:45:41 +02:00
neueID = rs . getInt ( " id " ) + 1 ;
2018-03-29 19:51:34 +02:00
}
rs . close ( ) ;
} catch ( SQLException e ) {
System . err . println ( " Couldn't handle DB-Query " ) ;
e . printStackTrace ( ) ;
}
return neueID ;
2018-03-29 19:45:41 +02:00
}
2018-04-02 15:07:58 +02:00
public ArrayList < tableDataPositionen > ladeTabellePositionen ( )
2018-03-29 19:51:34 +02:00
{ // Gibt ein Objekt daten mit allen Einträgen der DB zurück
2018-04-02 15:07:58 +02:00
ArrayList < tableDataPositionen > daten = new ArrayList < > ( ) ;
2018-03-29 19:51:34 +02:00
try {
Statement stmt = connection . createStatement ( ) ;
2018-04-02 15:07:58 +02:00
ResultSet rs = stmt . executeQuery ( " SELECT * FROM positionen; " ) ;
2018-03-29 19:45:41 +02:00
while ( rs . next ( ) ) {
try {
// Entschlüsselte Daten werden als Datenobjekt gespeichert
2018-04-02 15:07:58 +02:00
daten . add ( new tableDataPositionen ( rs . getInt ( " id " ) , rs . getString ( " name " ) , rs . getString ( " value " ) , rs . getString ( " color " ) ) ) ;
2018-03-29 19:45:41 +02:00
} catch ( Exception e ) {
// TODO Auto-generated catch block
e . printStackTrace ( ) ;
}
2018-03-29 19:51:34 +02:00
}
} catch ( SQLException e ) {
System . err . println ( " Couldn't handle DB-Query " ) ;
e . printStackTrace ( ) ;
}
2018-03-29 19:45:41 +02:00
return daten ;
}
2018-03-29 19:51:34 +02:00
public void setSchluessel ( String pSchluessel )
{ // Setzt den Schlüssel für die Ver-/Entschlüsslung
2018-03-29 19:45:41 +02:00
schluessel = pSchluessel ;
}
2018-03-31 23:50:17 +02:00
2018-03-29 19:45:41 +02:00
}