Datenbankverbinung mehrfach verwenden

Amen

Mitglied
Hallo,

ich bin dabei ein halbwegs größeres Programm zu schreiben.
Das Programm arbeitet viel mit einer Datenbank.
Die Verbindung klappt soweit.

Ich habe mir eine Klasse Datenbank geschrieben, die ich 1x in der Main-Methode meines Programmes aufrufe. Das Objekt gebe ich an die Klassen weiter, die mit der Datenbank arbeiten.

Die Datenbank-Klasse sieht so aus:
Java:
public class Datenbank {

    public Datenbank() throws SQLException, ClassNotFoundException, InstantiationException, IllegalAccessException {
        datenbankVerbinden();
    }

    public Connection connection;


    private void datenbankVerbinden() throws SQLException, ClassNotFoundException, InstantiationException, IllegalAccessException {
        String treiber = "org.apache.derby.jdbc.EmbeddedDriver";
        Class.forName(treiber).newInstance();

        String datenbankLink = "...";
        connection = DriverManager.getConnection(datenbankLink, ..., ...);
    }


    public synchronized ResultSet datenbankAktionMitResultSet(String abfrage, ResultSet resultSet) throws SQLException {
        try (Statement statement = connection.createStatement()) {
            resultSet = statement.executeQuery(abfrage);
        }
        return resultSet;
    }

    public synchronized void datenbankAktionOhneResultSet(String abfrage) throws SQLException {
        try (Statement statement = connection.createStatement()) {
            statement.executeUpdate(abfrage);
        }
    }

}

Wenn jetzt irgendeine Klasse meines Programms mit der Datenbank arbeiten will, bekommt diese Klasse das datenbank-Objekt, dass ich 1x in der main-methode erstellt habe und ruft mit dem Objekt dann die beiden Methoden datenbankAktionMitResultSet bzw. datenbankAktionOhneResultSet auf.

Wenn ich datenbankAktionMitResultSet aufrufe, erstelle ich zuerst ein Resultset-Objekt und lasse es mit der Methode dann auffüllen und wieder zurückgeben... (hoffentlich sowei verständlich :oops: )

- Ist es sinnvoll die beiden Methoden synchronized zu setzen?...um zu verhindern, dass die Methode zur gleichen Zeit mehrmals aufgerufen wird?
- Machen die beiden Methoden bzw. die Klasse Datenbank Sinn?
- Wie wird das bei wirklichen großen Programmen gemacht? ^^
 

stg

Top Contributor
Wenn ich dich richtig verstehe, dann arbeitest du also überall immer mit der gleichen Datenbankverbindung. Das ist nicht schön. Du solltest für jeden Aufruf eine neue Verbindung bereitsstellen und diese anschließend wieder schließen. Gib deinem Datenbankinterface/Klasse also eine Methode
Code:
public getConnection()
Mehr muss solch eine Klasse eigentlich gar nicht nach außen bekannt geben.

Da das öffnen (und anschließende schließen) von Datenbankverbindungen allerdings relativ langsam ist, greift man in der Praxis meistens auf ConnectionPooling zurück. Hierbei werden eine bestimmte Anzahl offener Verbindungen zur Datenbank bereitgestellt und die Verbindungen nur auf logischer Ebene nach außen hin geöfnnet und geschlossen. (In Wahrheit werden sie einfach aus dem Pool der zur Verfügung stehenden Verbindungen entfernt und wieder hinzugefügt).
Mit Derby hab ich selbst nie gearbeitet, aber dieses Vorgehen sollte von allen gängigen JDBC-Treiber unterstützt werden. Mit den genannten Schlagwörtern solltest du dazu definitiv eine Menge im Netz finden. Bei konkreteren Fragen, frag aber gerne noch mal nach.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
ruutaiokwu unique kombination, welche mehrfach vorkommen darf??? Datenbankprogrammierung 3
K Hibernate mehrfach doppelte Einträge in der Ergebnissmenge Datenbankprogrammierung 5
Landei PreparedStatement Parameter mehrfach verwenden Datenbankprogrammierung 18
K Welche DBS verwenden? Datenbankprogrammierung 0
J Hibernate + DTOs - DTOs in DAOs verwenden? Datenbankprogrammierung 1
E MySQL App-Engine - Externe SQL-Datenbank verwenden? Datenbankprogrammierung 2
G Derby/H2 Welches u. Wie installieren/verwenden? Datenbankprogrammierung 10
A MySQL Ergebnss aus SQL Abfrage in Hauptklasse verwenden Datenbankprogrammierung 3
B MAC Access Datenbank in Java verwenden - Treiberproblem Datenbankprogrammierung 2
P Hibernate -> SQL verwenden und keine Entity Datenbankprogrammierung 19
D CSV File als Datenbank verwenden (JDBC) Datenbankprogrammierung 4
R Bei Webformular DropDown Felder JA, NEIN! Was für einen Datentyp verwenden? Datenbankprogrammierung 7
A Connection Variable in anderer Klasse verwenden -> statement Datenbankprogrammierung 2
B Welche DB verwenden Datenbankprogrammierung 3
M JDBC3PoolingDataSource - Bestehende Verbindung verwenden Datenbankprogrammierung 3
D Access-Datenbank unter Java verwenden Datenbankprogrammierung 7
M Mehrere ResultSets gleichzeitig verwenden Datenbankprogrammierung 3

Ähnliche Java Themen


Oben