Hallo,
ich habe eine grundsätzliche Frage zu Exceptions in Verbindung mit einem JvaFX GUI welches ich versuche nach dem MVC Pattern zu erstellen.
In diesem Forum habe ich ja bereits gelernt das in in meiner Model Class keinerlei FX Komponenten haben sollte, diese werden im Controller behandelt um dann im View, sprich GUI, ausgegeben/dargestellt zu werden.
Nun muss ich zugeben das ich mich als Anfänger bis dato wenig mit Exceptions beschäftigt habe, nur das grundlegende, wie z.B. try/Catch Block etc.
Nun habe ich folgende Problematik. Ich habe ein kleines GUI welches eine Verbindung zu einer Datenbank herstellt/testet, Informationen abfragt, diese im GUI darstellt und ggf. noch bei hergestellter Verbindung SQL Kommandos absetzt. Ich habe eine Controller Class und ein main.fxml(View) mit einigen Feldern und einer TextArea in dem ich Meldungen etc. ausgeben möchte. Dann habe ich eine Klasse DB.class in der die Verbindung zur DB hergestellt wird.
Hier mal in Auszügen der Code um den es sich handelt:
DB.class (komplett)
Dann der Code aus der Controller Klasse - hier nur der Teil von dem ich denke das er für die Erklärung relevant ist:
In diesem Task wird die Verbindung zur Datenabk hergestellt:
Das funktioniert auch soweit wi ich mir das vorstelle, wenn ich korrekte Daten angebe und die DB verfügbar ist.
Nun zu meiner Frage:
Kommt es in der Klasse DB zu einem Problem, falsche DB SID, kann DB nicht erreichen, etc. wird z.B. eine SQL Exception geworfen. Diese gebe ich zur Zeit auf der Console aus.
Wie bekomme ich die Exceptions die in der DB Klasse geworfen werden in meiner TextArea angezeigt? Sprich wie kann der Controller auf diese Meldungen zugreifen um diese dann über z.B.
in meiner Message Area anzuzeigen.
Bevor ich mich mit JavaFX und MVC beschäftigt habe, war meine Lösung der DB Klasse das TextArea Objekt mizugeben damit von dort darein geschrieben werden kann.
Das soll ja aber mit MVC nicht so sein wenn ich es richtig verstanden habe??
Kann mir jemand hier helfen um eine korrekte Implementation im Sinne von MVC hin zu bekommen?
Gruß
Ralf
ich habe eine grundsätzliche Frage zu Exceptions in Verbindung mit einem JvaFX GUI welches ich versuche nach dem MVC Pattern zu erstellen.
In diesem Forum habe ich ja bereits gelernt das in in meiner Model Class keinerlei FX Komponenten haben sollte, diese werden im Controller behandelt um dann im View, sprich GUI, ausgegeben/dargestellt zu werden.
Nun muss ich zugeben das ich mich als Anfänger bis dato wenig mit Exceptions beschäftigt habe, nur das grundlegende, wie z.B. try/Catch Block etc.
Nun habe ich folgende Problematik. Ich habe ein kleines GUI welches eine Verbindung zu einer Datenbank herstellt/testet, Informationen abfragt, diese im GUI darstellt und ggf. noch bei hergestellter Verbindung SQL Kommandos absetzt. Ich habe eine Controller Class und ein main.fxml(View) mit einigen Feldern und einer TextArea in dem ich Meldungen etc. ausgeben möchte. Dann habe ich eine Klasse DB.class in der die Verbindung zur DB hergestellt wird.
Hier mal in Auszügen der Code um den es sich handelt:
DB.class (komplett)
Java:
package application;
import java.sql.Connection;
import java.sql.DriverManager;
import oracle.jdbc.OracleDriver;
public class DB {
// Fields
// Constructor
public DB() {
}
// Methods
// Create a database connection using jdbc and provided connection string and
// user/password information
public Connection dbConnect(String dbConnectString, String dbUserId, String dbPassword) {
try {
DriverManager.registerDriver(new OracleDriver());
Connection conn = DriverManager.getConnection(dbConnectString, dbUserId, dbPassword);
if (conn != null) {
return conn;
} else {
return null;
}
} catch (Exception ex) {
String msgException = String.valueOf(ex);
System.out.println(msgException);
return null;
}
}
}
Java:
@SuppressWarnings("rawtypes")
Service serviceWorkerConnectDB = new Service() {
@Override
protected Task createTask() {
return new Task() {
@Override
protected Void call() throws Exception {
// Start enetering execution code here ...
updateMessage("Task1: Check if ojdbc driver is available.");
LOGGER.info("Task1: Check if ojdbc driver is available.");
if (model.checkForJdbc()) {
updateMessage("Task1: Success.");
LOGGER.info("Task1: Success.");
} else {
updateMessage("Task1: Failed!");
setFadeTransitionLabelErrorStatus(true);
connectDB.setDisable(false);
serviceWorkerConnectDB.cancel();
}
updateMessage(
"Task2: Try database connection using: " + getConnectString() + " as user: " + dbSysUser);
LOGGER.info("Task2: Try database connection using: " + getConnectString() + " as user: " + dbSysUser);
Connection connSys = db.dbConnect(getConnectString(), dbSysUser, dbSysUserPassword.getText());
try {
jdbcInfo.setText("");
jdbcInfo.appendText("Java Version: " + System.getProperty("java.version") + "\n");
DatabaseMetaData metaData = connSys.getMetaData();
jdbcInfo.appendText("JDBC Driver Version: " + metaData.getDriverVersion() + "\n");
LOGGER.info("JDBC Driver Version: " + metaData.getDriverVersion());
updateMessage("Task2: Success.");
LOGGER.info("Task2: Success.");
updateProgress(1.0, 1.0);
connectDB.setDisable(false);
} catch (Exception ex) {
String msg = String.valueOf(ex);
updateMessage(msg);
setFadeTransitionLabelErrorStatus(true);
connectDB.setDisable(false);
serviceWorkerConnectDB.cancel();
}
// End entering execution code here ...
return null;
}
};
}
};
Java:
Connection connSys = db.dbConnect(getConnectString(), dbSysUser, dbSysUserPassword.getText());
DatabaseMetaData metaData = connSys.getMetaData();
Nun zu meiner Frage:
Kommt es in der Klasse DB zu einem Problem, falsche DB SID, kann DB nicht erreichen, etc. wird z.B. eine SQL Exception geworfen. Diese gebe ich zur Zeit auf der Console aus.
Wie bekomme ich die Exceptions die in der DB Klasse geworfen werden in meiner TextArea angezeigt? Sprich wie kann der Controller auf diese Meldungen zugreifen um diese dann über z.B.
Java:
updateMessage(msgExceptionClassDB);
Bevor ich mich mit JavaFX und MVC beschäftigt habe, war meine Lösung der DB Klasse das TextArea Objekt mizugeben damit von dort darein geschrieben werden kann.
Das soll ja aber mit MVC nicht so sein wenn ich es richtig verstanden habe??
Kann mir jemand hier helfen um eine korrekte Implementation im Sinne von MVC hin zu bekommen?
Gruß
Ralf