Hi,
ich habe da mal zwei Fragen was den Zugriff auf das Datenbank Objekt angeht. Und DB Zugriffe in verbindung mit Threads.
Und zwar habe ich mehrere Klassen die auf die Datenbank zugreifen müssen. Diese Klassen bauen die SQL Querys zusammen und schicken diese an den DBConnector.
Ich habe eine Klasse DBConnector.java die folgendermaßen aussieht:
Bisher habe ich diese Klasse einmal instanziert und übergebe aus der "MainGui" den Klassen die einen Zugriff auf die DB benötigen dieses Objekt.
Jetzt ist die Frage wie ihr das macht bzw. es gibt doch bestimmt ein Pattern o.ä. welches Zugriffe auf die DB regelt. Wird die DB Klasse in jeder Klasse neu instanziert oder wird die klasse statisch? Oder werden die Klassen mit dem DBConnector erweitert (extends)... (Habe gelesen das DB Zugriffe nicht unbedingt statisch geschehen sollen... )...
Die andere Frage ist, momentan werden alle SQL Abfragen in dem Swing Thread ausgeführt was auch nicht besonders klever ist. Habt ihr eventuell einen Tipp für mich wie ich den DB Zugriff über Threads realisieren kann (Rückgabe, synchron etc..). Ich bin Anfänger und habe doch ein paar Probleme was das Design bzw. die Struktur angeht. Deswegen würde ich mich sehr über ein paar gute Links oder sogar eine bereits von euch eingesetzte Lösung sehr freuen!
Thx Goodcat
ich habe da mal zwei Fragen was den Zugriff auf das Datenbank Objekt angeht. Und DB Zugriffe in verbindung mit Threads.
Und zwar habe ich mehrere Klassen die auf die Datenbank zugreifen müssen. Diese Klassen bauen die SQL Querys zusammen und schicken diese an den DBConnector.
Ich habe eine Klasse DBConnector.java die folgendermaßen aussieht:
Java:
public class DBConnector {
public MysqlDataSource ds = new MysqlDataSource();
public Connection DBConn;
private Statement stm;
private ResultSet rs;
private int DBError = 0;
public DBConnector() {
try {
ds.setDatabaseName(Main.dbDatabaseName);
ds.setServerName(Main.dbServerName);
ds.setPort(Main.dbPort);
ds.setUser(Main.dbUsername);
ds.setPassword(Main.dbPassword);
}
catch (Exception e) {
e.printStackTrace();
}
}
/**
* Schließt die Verbindung zum Datenbank Server.
*/
public void closeConnection() {
try {
DBConn.close();
}
catch (Exception e) {
e.printStackTrace();
}
}
public ResultSet executeQuery( String query ) {
try {
this.DBConn = ds.getConnection();
this.stm = DBConn.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_UPDATABLE);
this.rs = stm.executeQuery(query);
}
catch (CommunicationsException eConn) {
if (this.DBError != 1) {
JOptionPane.showMessageDialog(null, "ERROR: Could not establish a database connection", "DB Error", JOptionPane.ERROR_MESSAGE);
}
this.DBError = 1;
}
catch (Exception e) {
e.printStackTrace();
}
return this.rs;
}
public void alterQuery( String query ) {
try {
DBConn = ds.getConnection();
stm = DBConn.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_UPDATABLE);
stm.executeUpdate(query);
}
catch(MySQLIntegrityConstraintViolationException e1) {
e1.printStackTrace();
JOptionPane.showMessageDialog(null, "Der Eintrag konnte nicht gelöscht werden, da er mit einem anderen Datensatz verknüpft ist!", "DB Error", JOptionPane.ERROR_MESSAGE);
}
catch (Exception e) {
e.printStackTrace();
}
}
}
Bisher habe ich diese Klasse einmal instanziert und übergebe aus der "MainGui" den Klassen die einen Zugriff auf die DB benötigen dieses Objekt.
Jetzt ist die Frage wie ihr das macht bzw. es gibt doch bestimmt ein Pattern o.ä. welches Zugriffe auf die DB regelt. Wird die DB Klasse in jeder Klasse neu instanziert oder wird die klasse statisch? Oder werden die Klassen mit dem DBConnector erweitert (extends)... (Habe gelesen das DB Zugriffe nicht unbedingt statisch geschehen sollen... )...
Die andere Frage ist, momentan werden alle SQL Abfragen in dem Swing Thread ausgeführt was auch nicht besonders klever ist. Habt ihr eventuell einen Tipp für mich wie ich den DB Zugriff über Threads realisieren kann (Rückgabe, synchron etc..). Ich bin Anfänger und habe doch ein paar Probleme was das Design bzw. die Struktur angeht. Deswegen würde ich mich sehr über ein paar gute Links oder sogar eine bereits von euch eingesetzte Lösung sehr freuen!
Thx Goodcat