Hallo,
ich arbeite in einem Projekt an der Schnittstelle zur Datenbank. Dazu verwende ich eine Klasse Database, die die notwendigen Methoden (wie zB das Anlegen/Löschen/Verändern von Datensätzen) zur Verfügung stellt.
Meine Klasse wird dabei einmalig instanziiert. Ihre Methoden werden aber von unterschiedlichen Threads aufgerufen, es ist also theoretisch möglich, dass mehrere Methoden parallel ausgeführt werden.
Nun habe ich Database folgendermaßen implementiert: Es gibt ein Attribut [HIGHLIGHT="Java"]private Connection conn;[/HIGHLIGHT]
das im Konstruktor instanziiert und initialisiert wird
[HIGHLIGHT="Java"]this.conn = DriverManager.getConnection(this.url, this.user, this.password);[/HIGHLIGHT]
In meinen Methoden, die parallel aufgerufen werden, arbeite ich dann mit diesem einen Connection-Objekt.
z.B. zum Anlegen eines Datensatzes:
[HIGHLIGHT="Java"]
// Query-String generieren
String query = players.put(playerName);
try {
// Query-Statement instanziieren
Statement stmt = conn.createStatement();
// Query ausführen
if (stmt.execute(query)) {
ResultSet rs = stmt.getResultSet();
// Attribute laden
// ... hier wird das ResultSet ausgelesen
}
} catch (SQLException ex) {
// Fehlerbehandlung
this.handleException(ex, query);
}
[/HIGHLIGHT]
Dies mache ich in jeder Methode so. Meine Frage ist nun, ob das überhaupt so möglich ist, da ja durch den parallelen Aufruf das eine Connection-Objekt this.conn dann auch parallel bearbeitet wird. Soll ich besser in jeder Methode einzeln ein Connection-Objekt instanziieren?
ich arbeite in einem Projekt an der Schnittstelle zur Datenbank. Dazu verwende ich eine Klasse Database, die die notwendigen Methoden (wie zB das Anlegen/Löschen/Verändern von Datensätzen) zur Verfügung stellt.
Meine Klasse wird dabei einmalig instanziiert. Ihre Methoden werden aber von unterschiedlichen Threads aufgerufen, es ist also theoretisch möglich, dass mehrere Methoden parallel ausgeführt werden.
Nun habe ich Database folgendermaßen implementiert: Es gibt ein Attribut [HIGHLIGHT="Java"]private Connection conn;[/HIGHLIGHT]
das im Konstruktor instanziiert und initialisiert wird
[HIGHLIGHT="Java"]this.conn = DriverManager.getConnection(this.url, this.user, this.password);[/HIGHLIGHT]
In meinen Methoden, die parallel aufgerufen werden, arbeite ich dann mit diesem einen Connection-Objekt.
z.B. zum Anlegen eines Datensatzes:
[HIGHLIGHT="Java"]
// Query-String generieren
String query = players.put(playerName);
try {
// Query-Statement instanziieren
Statement stmt = conn.createStatement();
// Query ausführen
if (stmt.execute(query)) {
ResultSet rs = stmt.getResultSet();
// Attribute laden
// ... hier wird das ResultSet ausgelesen
}
} catch (SQLException ex) {
// Fehlerbehandlung
this.handleException(ex, query);
}
[/HIGHLIGHT]
Dies mache ich in jeder Methode so. Meine Frage ist nun, ob das überhaupt so möglich ist, da ja durch den parallelen Aufruf das eine Connection-Objekt this.conn dann auch parallel bearbeitet wird. Soll ich besser in jeder Methode einzeln ein Connection-Objekt instanziieren?