Instanz von Datenbankklasse

Status
Nicht offen für weitere Antworten.
M

Matze678

Gast
Hallo,

ich programmiere gerade eine Swing-Applikation, die sich zu einer MySQL Datenbank verbindet und dem Benutzer ermöglicht Datensätze zu editieren. Dabei handelt es sich grob gesagt um personenbezogene Daten, die sich grob in die Kategorien "Mitglieder" und "Förderer" einteilen lassen. Dazu sind in der Datenbank zwei verschiedene Tabellen vorhanden.

Ich habe mir eine Datenbank-Klasse geschrieben, die alle datenbankbezogenen Aufgaben erledigt, d.h. Verbinden, Abfragen, usw. Weiterhin habe ich zwei Klassen geschrieben, die jeweils die verschiedenen Funktionen zum editieren von Mitgliedern und Förderern abwickeln.

Nun möchte ich, dass jede dieser beiden Klassen auf die selbe Instanz der Datenbankklasse zurückgreift, damit ich nicht mehrere offene Verbindungen habe. Frage: Wie mache ich das? Wenn ich die Datenbankinstanz in der Hauptklasse (dem JFrame) deklariere, dann ist sie in den beiden Klassen für Mitglieder und Förderer nicht bekannt. Da Java auch kein call-by-reference unterstützt, mit dem ich dann bspw. im Konstruktor der jeweiligen Klasse eine Referenz auf die Datenbank herstellen könnte, bin ich etwas auf verlorenem Posten. Zur Veranschaulichung noch mal etwas PseudoCode:

Code:
class Main extends JFrame {

...
Datenbank db = new Datenbank();
...
}


class Mitglieder {

...
db.doQuery(query);      // db nicht bekannt
...
}


class Förderer {

...
db.doQuery(query);      // db nicht bekannt
}

Wie gesagt könnte ich die Datenbank jeweils lokal in der jeweiligen Klasse (Mitglieder und Förderer) definieren, aber dann hätte ich ja automatisch zwei unterschiedliche Datenbankinstanzen, was ich eigentlich nicht möchte. Kann mir da jemand einen Tipp geben, wie man sowas am Besten löst?


Grüße, Matze
 
M

Matze678

Gast
Achso, vielleicht wäre es noch wichtig zu erwähnen, dass beide Klassen (Mitglieder und Förderer) die Klasse JScrollPane erweitern, die widerum eine Tabelle darstellt. In der jeweiligen Klasse sind alle Methoden vorhanden, um die jeweilige Tabelle zu befüllen, zu editieren, usw. So kann ich die tabellarische Darstellung ganz einfach durch anlegen einer Instanz im JFrame in meine Swing-Applikation einbinden.
 

Prismapanda

Aktives Mitglied
Doch, du kannst das Datenbank Objekt im Konstruktor übergeben.
"Alle Parameter werden in Java per call by value übergeben. Beim Aufruf einer Methode wird also der aktuelle Wert in die Parametervariable kopiert und an die Methode übergeben. Veränderungen der Parametervariablen innerhalb der Methode bleiben lokal und wirken sich nicht auf den Aufrufer aus."
...
"Wie bereits erwähnt, sind Objektvariablen Referenzen, also Zeiger. Zwar werden auch sie bei der Übergabe an eine Methode per Wert übergeben. Da innerhalb der Methode aber der Zeiger auf das Originalobjekt zur Verfügung steht (wenn auch in kopierter Form), wirken sich Veränderungen an dem Objekt natürlich direkt auf das Originalobjekt aus und sind somit für den Aufrufer der Methode sichtbar. Wie in allen anderen Programmiersprachen entspricht die call by value-Übergabe eines Zeigers damit natürlich genau der Semantik von call by reference."
In deinem Fall könntest du allerdings auch die Datenbank Klasse als Singleton implementieren und in den anderen Klassen z.B. mittels Datenbank::getInstance() beziehen.
Noch ein wenig schöner wäre dann vielleicht das arbeiten mit DataAccessObjects (DAOs) (mit übergabe der Verbindung).

Dass deine Objekte eine JScrollPane erweiterrn scheint mir nicht sonderlich gut. Wenn du vorhast, das ganze später noch zu erweitern würde ich das ändern...
 
M

Matze678

Gast
Ich hab das Ganze jetzt mal als Singleton implementiert. Funktioniert super, vielen Dank für den Hinweis!
 

tfa

Top Contributor
Grmpf. Naja, wenn du irgendwann mal eine Verbindung zu ner zweiten DB brauchst, kannst du ja das Multiton-Pattern benutzen. :lol:
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
EinNickname9 Best Practice Singleton und Singleton mit Instanz zu anderer Klasse -Pattern Allgemeine Java-Themen 30
J Verständnis Frage zur Instanz, Objekte, Instanzierung, Referenz Allgemeine Java-Themen 14
Thallius HTTPS Request mit unbekannter Instanz Allgemeine Java-Themen 24
S Speicherverwaltung bei Instanz- und Klassenvariablen JS vs. Java Allgemeine Java-Themen 2
T MEthodenauruf testen, wenn instanz erst erzeugt wird Allgemeine Java-Themen 0
OnDemand InetAddress Instanz Allgemeine Java-Themen 4
T Klassen Instanz einer Klasse ausserhalb des Jar Allgemeine Java-Themen 2
J Ist eine Instanz von einem bestimmten Object Typ? Allgemeine Java-Themen 6
B JavaFX fxml, die selbe Instanz der Klasse Allgemeine Java-Themen 4
E Auf Java-Objekt aus anderer Instanz zugreifen Allgemeine Java-Themen 26
DStrohma In abstrakter Klasse Konstruktor von Instanz implementieren Allgemeine Java-Themen 11
S OOP Objekte als Return-Werte: Einen Klon zurückgeben oder Instanz auf das Feld? Allgemeine Java-Themen 10
V Serialisierung von Instanz eigener Klasse Allgemeine Java-Themen 5
S Singleton Instanz löschen Allgemeine Java-Themen 5
Kr0e Reflection - Instanz einer Klasse erstellen, ohne Default-Constructor Allgemeine Java-Themen 15
sambalmueslie Benachrichtigung bei neuer Objekt-Instanz Allgemeine Java-Themen 5
L Object Instanz anhand eines Strings Allgemeine Java-Themen 10
M Object-Instanz in Date übersetzen Allgemeine Java-Themen 6
M Neue Instanz/Kopie einer unbekannten Klasse Allgemeine Java-Themen 7
M Instanz "von außen" erstellen unterbinden Allgemeine Java-Themen 3
S Neue Instanz eines Objekts erzeugen - Konstruktor erhaelt Parameter. Allgemeine Java-Themen 5
V Reflection - Field-Instanz und Annotations Allgemeine Java-Themen 6
S Instanz in einer Klasse erstellen, und dem Konstruktor die eigene Klasse mitgeben Allgemeine Java-Themen 4
J Instanz-Felder einer Klasse initialisieren Allgemeine Java-Themen 6
N Variablen eines Objektes (instanz) in einen Array lesen Allgemeine Java-Themen 7
M Instanz erstellen Allgemeine Java-Themen 3
flashfactor Prüfen ob bereits eine Instanz gestartet ist Allgemeine Java-Themen 2
A Nur eine Instanz eines Programms ausführen Allgemeine Java-Themen 3
T Instanz einer Interface abgeleiteten Klasse erzeugen Allgemeine Java-Themen 3
I size einer instanz Allgemeine Java-Themen 9
minzel Instanz auslesen? Allgemeine Java-Themen 22
G überpüfen ob bereits instanz von java applikation läuft Allgemeine Java-Themen 4
B Instanz? Allgemeine Java-Themen 6
H Vererbung auch ohne erzeugung einer Instanz möglich? Allgemeine Java-Themen 3
B nur eine Instanz eines Programms laufen lassen Allgemeine Java-Themen 8
G Nur eine Instanz einer Applikation Allgemeine Java-Themen 4
G Instanz IDs Allgemeine Java-Themen 13
P Nur eine Instanz eines Programms zulassen, wie geht das? Allgemeine Java-Themen 15
J Instanz einer inneren Klasse Allgemeine Java-Themen 9
H Methode einer zur Laufzeit generierten Instanz aufrufen Allgemeine Java-Themen 2

Ähnliche Java Themen

Neue Themen


Oben