Hallo,
ich habe ein Programm das Daten aus einer Datenbank ausliest und diese auf einem Textfeld ausgibt.
Das tut er aber immer nur einmal am Anfag, wenn ich das Programm mit Eclipse laufen lasse.
Nun möchte ich aber, dass das laufende Programm, während ich etwas in die Datenbank eintrage diese auch sofort anzeigt und ich nicht erst wieder das Programm neu laufen lassen muss.
Das einfachste wird es sein, die benötigten Daten einfach periodisch oder explizit auf Anfrage neu zu laden.
Moderne Datenbanken haben auch die Möglichkeit eine Client-Anwendung über Änderungen zu informieren, aber das ist in deinem Fall vermutlich deutlich übers Ziel hinaus geschossen.
Naja eine Schleife basteln welche solange läuft bis das Programm geschlossen wird. In der Schleife lässt du die Daten auslesen und machst ein View Update.
Damit deine UI nicht einfriert musst du die Schleife in einen eigenen Thread auslagern.
importjavafx.application.Application;importjavafx.scene.Scene;importjavafx.scene.control.Label;importjavafx.scene.control.TextArea;importjavafx.scene.layout.Pane;importjavafx.stage.Stage;importjava.sql.*;importjava.time.LocalDate;//import com.mysql.jdbc.PreparedStatement;publicclassSpeiseplanextendsApplication{@Overridepublicvoidstart(Stage stage)throwsException{finalTextArea ta1 =newTextArea();
ta1.setPrefRowCount(5);
ta1.setPrefColumnCount(10);
ta1.setPrefWidth(250);
ta1.setPrefHeight(100);
ta1.setLayoutX(100);
ta1.setLayoutY(50);finalTextArea ta2 =newTextArea();
ta2.setPrefRowCount(5);
ta2.setPrefColumnCount(10);
ta2.setPrefWidth(250);
ta2.setPrefHeight(100);
ta2.setLayoutX(400);
ta2.setLayoutY(50);finalTextArea ta3 =newTextArea();
ta3.setPrefRowCount(5);
ta3.setPrefColumnCount(10);
ta3.setPrefWidth(250);
ta3.setPrefHeight(100);
ta3.setLayoutX(700);
ta3.setLayoutY(50);LocalDate today =LocalDate.now();int i =1;while(i<5){try{String url ="jdbc:mysql://localhost:3306/speiseplan";String username ="root";String password ="";//1. get connectionConnection myConn =DriverManager.getConnection(url, username,password);//2. create a statementStatement myStmnt = myConn.createStatement();//3. execute SQL queryResultSet myRs = myStmnt.executeQuery("select * from gerichte where date= '"+ today.toString()+"'");while(myRs.next()){String date = myRs.getString("date");String name = myRs.getString("name");String type = myRs.getString("type");
ta1.appendText(date +"\n");
ta2.appendText(name +"\n");
ta3.appendText(type +"\n");}}catch(Exception e){
e.printStackTrace();}}Pane pane =newPane();Scene scene =newScene(pane);
pane.getChildren().addAll(ta1,ta2,ta3);
stage.setWidth(1200);
stage.setHeight(850);
stage.setScene(scene);
stage.setTitle("Termine");
stage.show();
stage.centerOnScreen();}publicstaticvoidmain(String[] args){launch(args);}}
Ich habe versucht eine Endlosschleife einzubauen, aber wenn ich das mache bleibt das Programm nachdem starten hängen. naja ich werde mal bisschen probieren. Melde mich später nochmal
Edit: Über Threads weiß ich so gut wie nix. Da müsste ich mich erstmal reinarbeiten...
Oben wurde schon gesagt, das aktualisieren in einem eigenen Thread laufen lassen.
Edit: Ja da hilft in dem Fall wohl nix. Sollte aber nicht soooo schwierig werden. Mal kurz ins Java-Lehrbuch schauen, versuchen und dann evtl. weiterhelfen lassen.