//Konstruktor
public Hauptfenster()
{
initComponents();
setWinwowSize(700, 600, this);
lesen(DBC);
//Kopfzeile der Tabelle
String[] titles = new String[]{ "BootsNR", "KundenNR", "Mietdauer", "Fahrgäste", "Zeit", "übrig"};
model = new DefaultTableModel( titles, 0 );
tblBoote_zu_See.setModel(model);
int size = model.getColumnCount();
//Zweidimensionaler Arry wird mit DB Werten befüllt in Methode (Connection übergeben)
String[][] DBAbfrage = createDBAbfrage(DBC);
int Anzahl = getAnzahl(DBC);
System.out.println(DBAbfrage.length);
for(int i=0; i<Anzahl; i++) //true, wenn noch eine weitere Zeile im Speicher vorhanden
{
model.addRow( DBAbfrage[i]);
}
}
public String[][] createDBAbfrage(DB_Connection pDBC)
{
int i = 0;
int KNr = 0;
int BNr = 0;
int Mdauer = 0;
int Fahrg = 0;
Date entleihzeit;
int Anzahl = getAnzahl(pDBC);
System.out.println("Gefunden: " + Anzahl);
final String[][] DBAbfrage = new String[Anzahl][6];
try
{
//rs enthält das Ergebnis der Abfrage
pDBC.rs = pDBC.stmt.executeQuery("SELECT * FROM tblverleihung");
//Schleife um die Ergebniszeilen zu verarbeiten
while(pDBC.rs.next()) //true, wenn noch eine weitere Zeile im Speicher vorhanden
{
BNr = pDBC.rs.getInt("Bootsnummer");
KNr = pDBC.rs.getInt("Kundennummer"); //rs.getInt(1); --> Auch über Spaltennummer ansprechbar
Mdauer = pDBC.rs.getInt("Mietdauer");
Fahrg = pDBC.rs.getInt("AnzahlFahrgaeste");
entleihzeit = pDBC.rs.getTime("Entleihzeit");
System.out.println("Zeit: "+entleihzeit);
// Strasse = pDBC.rs.getString("Strasse");
// HNummer = pDBC.rs.getInt("Hausnummer");
// PLZ = pDBC.rs.getString("PLZ");
// Ort = pDBC.rs.getString("Ort");
int Kundennummer = KNr;
int Bootsnummer = BNr;
int Fahrgaeste = Fahrg;
final int Mietdauer = Mdauer;
String UID, BNr1, SFahrg, SMietd;
UID = (new Integer(Kundennummer)).toString();
BNr1 = (new Integer(Bootsnummer)).toString();
SFahrg = (new Integer(Fahrgaeste)).toString();
SMietd = (new Integer(Mietdauer)).toString();
DBAbfrage[i][0] = BNr1;
DBAbfrage[i][1] = UID;
DBAbfrage[i][2] = SMietd;
DBAbfrage[i][3] = SFahrg;
DBAbfrage[i][4] = entleihzeit.toString();
i = i+1;
}
// Methodenaufruf
setRunable( DBAbfrage);
}
catch(SQLException s)
{
System.out.println("Statement failed");
System.out.println(s.toString());
}
return DBAbfrage;
}
public void createTable(DB_Connection DBC, String[][] DBAbfrage)
{
String[] titles2 = new String[]{ "BootsNR", "KundenNR", "Mietdauer", "Fahrgäste", "Zeit", "übrig"};
model = new DefaultTableModel( titles2, 0 );
tblBoote_zu_See.setModel(model);
// int size = model.getColumnCount();
// String[][] DBAbfrage = createDBAbfrage(DBC);
int Anzahl = getAnzahl(DBC);
// System.out.println(DBAbfrage.length);
for(int i=0; i<Anzahl; i++) //true, wenn noch eine weitere Zeile im Speicher vorhanden
{
model.addRow(DBAbfrage[i]);
}
};
public void setRunable(final String[][] DBAbfrage)
{
Runnable r = new Runnable()
{
String time = null;
public void run()
{
boolean b =true;
//Ich hab hier einfach ne endlos while schleife weil er sonst die Zeilen nicht mehr aktualisiert
//so springt er immer wieder in die for schleife und berechnet alles neu
while ( b=true ) {
int ab = DBAbfrage.length;
for ( int c=0; c<ab; c++ ) {
// erstellt einen Integer aus der Mietdauer
int dauer = Integer.parseInt(DBAbfrage[c][2]);
// aktuelle Zeit
Date now = new Date();
SimpleDateFormat sdf1 = new SimpleDateFormat("HH:mm:ss");
String SyszeitS = sdf1.format(now);
// System.out.println("Testzeit: " +ausgabe);
Date Syszeit = null;
Date Ausleihzeit = null;
//Syszeit und Ausleihzeit vom String zum Date machen
try{
Syszeit = sdf1.parse(SyszeitS);
Ausleihzeit = sdf1.parse(DBAbfrage[c][4]);
}
catch(ParseException e){
System.out.print("geht net");
}
// System.out.println("Testzeit1: " +Syszeit); //Dient nur zur Prüfung
// System.out.println("Testzeit1: " +Ausleihzeit);
// Berechnet die Minutenanzahl die noch übrig sind bis die Zeit zu ende ist
//die Mietdauer wird dazuaddiert, da sonst gleich ein negativer wert rauskommt. So bleiben die Minutenanzahl bis die Dauer abgelaufen ist
long minuten = (Ausleihzeit.getTime()-Syszeit.getTime())/60000+dauer; // Ausleihzeit - Syszeit geteilt durch 60000 da 1min 60000ms hat (1000ms=1s)
// int sekunden hat keinen Sinn...ich hab keine Idee wie ich die parallel runterzähle, deshalb statischer wert der nix tut
int sekunden = 60;
//Hier mach ich einen String aus dem Long von Minuten und sekunden
String sek = String.valueOf(sekunden);
String leer = "min"; // Trennung zwischen Minuten und Sekunden
String min = String.valueOf(minuten);
//Hier füge ich die Strings zu einen ganzen String zusammen
StringBuilder text = new StringBuilder(min);
text.append(leer);
// text.append(sek);
//zusammengefügter String
String zusammen = text.toString();
//String wird dem Array zugewiesen
DBAbfrage[c][5] = String.valueOf(zusammen);
}
//Hier schläft die Runable 5sek
try
{
Thread.sleep(5000);
}
catch (Exception e)
{
System.out.println("geht net");
}
//Table neuaufbauen
createTable(DBC, DBAbfrage);
}
}
};
new Thread(r).start();
}