Quote:
Originally Posted by TeilzeitGangster
Wenn ich also nun die Datenbankverbindung in eine eigene Methode packe(nennen wir es Connection.java)
Wenn ich nun das Programm compile wird die Datenbankverbindung automatisch hergestellt, ohne dass ich vorher etwas in der main dafür aufrufe? Sorry da fehlt mir irgendwie noch das Verständnis für. Danke schonmal!
|
Nein, du musst das Objekt irgendwo erstellen oder die Methode irgendwo aufrufen. Sagen wir mal du hast irgendwie so eine Klasse:
Code:
import java.sql.Connection;
import java.sql.DriverManager;
import java.nio.file.Path;
public class DBConnection {
private final Connection sqlConnection;
public DBConnection(Path configPath) {
// Load connection info from configPath, e.g. via xml reader or sth. like that
sqlConnection = DriverManager.getConnection(jdbcURL, user, pass);
}
[...]
public void cleanUp() {
sqlConnection.close();
}
}
Dann musst du diese klasse irgendwo benutzen, z.b. in der Main:
Code:
import java.nio.file.Paths;
public class Foo {
public static void main(String args[]) {
DBConnection conn = new DBConnection(Paths.get("./config"));
try {
[...]
finally {
conn.cleanUp();
}
}
}
Am besten stellst du es dir so vor, jede Resource ist ein Objekt, und jedes Objekt gehört irgendeinem anderen Objekt oder einer Methode. Wem ein Objekt gehört ist dafür verantwortlich es wieder aufzuräumen wenn es nicht mehr benötigt wird. Es darf zu jedem Zeitpunkt nur ein besitzer pro Objekt exsistieren, sonst hast du entweder: 1. keinen besitzer, dann wird nicht aufgeräumt, oder 2. mehrere besitzer, dann wird eventuell 2 mal aufgeräumt, oder es wird aufgeräumt während ein anderer das Objekt noch benutzt.
Konkret für Java heißt das, ein Objekt das eine Resource oder ein Objekt benutzt das aufgeräumt werden muss, muss eine CleanUp methode bereitstellen in der die cleanUp aller aufzuräumenden Objekte (oder in diesem fall die close methode) aufgerufen wird. Jede Methode die ein Objekt benutzt muss das aufgeräumt werden muss, muss mittels try-finally garantieren das nach der benutzung die cleanup methode aufgerufen wird.
Hier besitzt das DBConnection Objekt das sqlConnection Objekt, muss das also in der cleanUp aufräumen. Die Main funktion besitzt wiederum das sqlConnection objekt, muss also wenn sie fertig ist es zu benutzen dieses wiederum aufrufen. Um das zu garantieren wird try-catch benutzt