DBConnection als Methode in mehreren Klassen

coo123

Neues Mitglied
Hallo liebe Gemeinde,

ich habe vor kurzem begonnen Java zu programmieren und bin nun auf ein Problem gestoßen bei dem ich nicht mehr weiterkomme und die Hilfe einer netten Community brauche :).

Und zwar möchte ich eine Methode in einer Klasse erstellen, auf der ich von allen anderen Klassen zugreifen kann.
Diese sollte lediglich die Verbindung zu meiner MySql Datenbank herstellen.
Beispiel:
Code:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;

import javax.swing.JComboBox;

public class dbconnect {
	
	public dbconnect() {
	
		  String url = "jdbc:mysql://localhost:3306/database";
		  String driver = "com.mysql.jdbc.Driver";
		  String userName = "root"; 
		  String password = "MyNewPassword";
		  try {
				Class.forName(driver).newInstance();
				Connection con = (Connection)DriverManager.getConnection(url,userName,password);
					
			  } 
		  
	}catch (Exception ex) {
		  System.out.println("Error: "+ex);
	}
}
}

Nun möchte ich in einer anderen Klasse, wo ich ein GUI mit Comboboxen programmiert habe, diese Query in meiner Combobox anzeigen lassen. Wie mache ich das? Das sollte doch irgendwie so funktionieren oder nicht?
Muss der Code in die Klasse rein wo ich das GUI programmiert habe? Wenn ja, wo kommt dann meine Methode zum Verbinden der Datenbank hin?

Code:
public void getcombo (){
	String sql = "SELECT Expense.Code FROM expense_code_master";
	ResultSet rs = con.prepareStatement(sql).executeQuery();
	
	while (rs.next()) {
		String name = rs.getString("Expense Code");
		comboBox.addItem(name);
		
  }

Vielen Dank für eure Hilfe
 

stg

Top Contributor
Der GUI ist es egal, wo die Daten herkommen, und was später mit diesen passiert. Sie ist nur dafür die Eingaben vom Benutzer entgegen zu nehmen und dem User Daten anzuzeigen. Datenbankabfragen haben in der GUI daher rein gar nichts verloren.

Ich würde aber unabhängig davon empfehlen, dass du erst mal klein anfängst. Ein Programm mit GUI und Datenbank-Verbindung ist mMn nichts für Anfänger. Wenigstens die OOP-Grundlagen sind Vorraussetzung, dass da überhaupt was brauchbares bei rumkommt.
Wenn du gerade anfängt mit der Programmierung, dann beschränke dich zunächst mal auf die Grundlagen und schreibe ein paar einfache Konsolenanwendungen, auch wenn das Ergebnis dann vielleicht nicht direkt so hübsch aussieht und Spaß macht. Aber letzten Endes hast du mehr davon, wenn du nicht gleich alles auf einmal versuchst und nur Kappes dabei herauskommt
 

coo123

Neues Mitglied
Hallo stg,

mir ist schon klar das sowas nichts für Anfänger ist, ich habe auch schon kleine Anwendungen erfolgreich programmiert.
Mit meiner Datenbank habe ich auch schon erhebliche Fortschritte erreicht, aber leider ist das alles nicht sehr effizient.

Gibt es keinen der eine Lösung bieten will?

LG
 

Joose

Top Contributor
Code:
public class dbconnect {
	
	public dbconnect() {
	
		  String url = "jdbc:mysql://localhost:3306/database";
		  String driver = "com.mysql.jdbc.Driver";
		  String userName = "root"; 
		  String password = "MyNewPassword";
		  try {
				Class.forName(driver).newInstance();
				Connection con = (Connection)DriverManager.getConnection(url,userName,password);
					
			  } 
	}catch (Exception ex) {
		  System.out.println("Error: "+ex);
	}
}
}

Gut sobald du ein Objekt dieser Klasse "dbConnect" machst, holst du dir ein Connection Objekt für die DB.
Und dieses wird gleich wieder im Nirvana verschwinden da es eine lokale Variable im Konstruktor ist.
--> Grundlagen der OOP

Nun möchte ich in einer anderen Klasse, wo ich ein GUI mit Comboboxen programmiert habe, diese Query in meiner Combobox anzeigen lassen. Wie mache ich das? Das sollte doch irgendwie so funktionieren oder nicht?
Muss der Code in die Klasse rein wo ich das GUI programmiert habe? Wenn ja, wo kommt dann meine Methode zum Verbinden der Datenbank hin?

Code:
public void getcombo (){
	String sql = "SELECT Expense.Code FROM expense_code_master";
	ResultSet rs = con.prepareStatement(sql).executeQuery();
	
	while (rs.next()) {
		String name = rs.getString("Expense Code");
		comboBox.addItem(name);
		
  }

So wie du den Datenbank Zugriff und den Aufbau der GUI hier mischt ist es ganz schlecht gelöst!
--> Schichtenmodell

mir ist schon klar das sowas nichts für Anfänger ist, ich habe auch schon kleine Anwendungen erfolgreich programmiert.
Mit meiner Datenbank habe ich auch schon erhebliche Fortschritte erreicht, aber leider ist das alles nicht sehr effizient.

Gibt es keinen der eine Lösung bieten will?

Was für kleine Anwendungen denn? Deine dbconnect Klasse zeugt nicht von viel Verständnis der OOP.
Ich würde dir vorschlagen kleine Schritte zu machen. Versuche zuerst einmal dein Program ohne GUI zu schreiben.
Sprich: Verbindung zur Datenbank herzustellen, Daten abfragen, (möglicherweise in Objekte packen) und diese Daten dann auf der Konsole auszugeben.

Danach kannst du immer noch eine GUI einbauen (und auf Grund eines Schichtenmodells sollte dies nicht all zu schwer sein)
Wir bieten hier keine Lösungen (und wenn kostest das etwas), wir helfen aber gerne dir zu einer Lösung finden :) -> Eigeninitiative
 

turtle

Top Contributor
Ich stimme meinem Kollegen Joose voll zu:D

Ich ergänze und sage dir, das bereits in den wenigen Zeilen Code, die du gezeigt hast, Probleme enthalten sind, die du lösen solltest, BEVOR du dich mit einer GUI befasst.

Code:
Class.forName(driver).newInstance();
Braucht man nicht mehr und sollte entfernt werden.

Das du eine Connection nur in der Methode dbconnect aufbaust wurde schon gesagt. Aber praktisch immer nutzt man einen Connection-Pool für JDBC-Verbindungen. Damit sollest du dich mal beschäftigen.

Dabei wirst du auch bemerken, das die Kapselung einer dbconnect-Methode zu feingranular ist und einem Pool überlassen bleiben sollte.

Dann bleibt noch das Abschicken und Verwalten von Resourcen, wie Statements, Resultset und Connections. Dieses ist in der Tat nicht ganz ohne, insbesondere weil jederzeit Exception auftreten können. Daher werden oft ORM wie Hibernate, JPA, oder myBATIS eingesetzt, weil man von denen weiss, das sie es richtig machen.Apropos Statements: Hier solltest du dich unbedingt mal mit Prepared-Statements auseinandersetzen (Stichwort SQL-Injection)

Du siehst, selbst ohne GUI, gibt es noch eine Fülle von Dingen, die du machen kannst. DANACH sollte sich das Nutzen von DB aus einer GUI dir schon erschließen.
Einfach so ein Programm zusammenbasteln bringt es nicht, wenn man nicht bereit ist, sich tiefer in die Materie einzuarbeiten:rtfm:
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
W Hilfe bei Methode Allgemeine Java-Themen 14
Ü Methoden Arrays vergleichen - Methode Allgemeine Java-Themen 1
Simon16 compareTo Methode überschreiben Allgemeine Java-Themen 4
TheSkyRider Methode über DataInputStream "auslösen" Allgemeine Java-Themen 6
M CrudRepository save Methode mocken Allgemeine Java-Themen 6
thor_norsk toString() - Methode Allgemeine Java-Themen 6
A Clean Code: Variable vs. Methode Allgemeine Java-Themen 8
Encera Zweite Main-Methode zuschalten Allgemeine Java-Themen 18
M Optimierung einer Methode (byte-Geraffel) Allgemeine Java-Themen 2
I Hibernate Envers - Aufruf der Methode zum Speichern selbst ausführen oder managen? Allgemeine Java-Themen 0
N rekursion mehrfach eine Methode Öffnen Allgemeine Java-Themen 4
berserkerdq2 Wenn ich eine Methode nur jede 50ms ausführen will, wie mach ich das? Allgemeine Java-Themen 4
berserkerdq2 run-methode eines Threads so programmieren, dass 30x die Sekunde etwas ausgeführt wird. Allgemeine Java-Themen 44
N Schnellste Methode, ein Array durchzugehen? Allgemeine Java-Themen 9
E Methoden abstract static Methode Allgemeine Java-Themen 8
E Eine Methode einer extendeten Klasse deakitivieren Allgemeine Java-Themen 12
F Getter Methode aufrufen funktioniert nicht Allgemeine Java-Themen 1
B In Java Methode mit generic input und output basteln? Allgemeine Java-Themen 4
goldmensch Datentypen Welche Methode hat die bessere Performance? Allgemeine Java-Themen 12
R Lambda Expression in einer Methode execute() aufrufen (execute() ist eine Methode aus dem funktionalen Interface Command) Allgemeine Java-Themen 5
T C++ Methode Übersetzung in Java Allgemeine Java-Themen 3
L Erste Schritte TDD testen einer Methode mit injezierten Services? Allgemeine Java-Themen 12
R @author vor Methode (eclipse) Allgemeine Java-Themen 1
J RotSchwarzBaum: Löschen mittels insert-Methode Allgemeine Java-Themen 20
Y Java Bruttoberechnen + runden Methode Allgemeine Java-Themen 1
R Warum ist die Methode unendlich oft rekursiv? Allgemeine Java-Themen 5
R Methoden Was fehlt mir bzw. muss ich bei der Methode countHarshabNumbers ändern damit ich die Harshad Zahlen im Intervall [51, 79] zählen kann? Allgemeine Java-Themen 19
D ArrayListe delete Methode klappt nicht Allgemeine Java-Themen 12
Drachenbauer Wie finde ich den Aufrufer zu einer Methode, die sich nicht in meinem Projekt befindet? Allgemeine Java-Themen 2
A Ist ein enum hier richtig? Enum toString() Methode. Allgemeine Java-Themen 1
Scream_ilias brute force methode verbessern? Allgemeine Java-Themen 6
Scream_ilias passwort meines pc per brute force methode knacken Allgemeine Java-Themen 4
S static methode im Interface Allgemeine Java-Themen 1
M Konstruktor einer Methode Allgemeine Java-Themen 35
A HashMap Methode "get()"-Problem Allgemeine Java-Themen 28
E Hat der Compiler einen Fehler oder warumbeendet return nicht eine Methode ? Allgemeine Java-Themen 7
T Sinn einer toString Methode Allgemeine Java-Themen 3
T Split() Methode funktioniert nicht?! Allgemeine Java-Themen 11
L Methoden Über Reflections eine Methode mit aufrufen Allgemeine Java-Themen 3
S Kann ich eine Methode schreiben die alle Arten von funktionalen Interfaces akzeptiert..? Allgemeine Java-Themen 21
L ToString-Methode Allgemeine Java-Themen 6
X Datentypen NPE in längerer Methode Allgemeine Java-Themen 12
I Methoden Generics-Methode Allgemeine Java-Themen 3
H Strategy Pattern - changeColor() Methode - input rgd oder hex einlesen Allgemeine Java-Themen 1
T statische Variable und nicht-statische Methode Allgemeine Java-Themen 2
B Aufruf der Methode ergibt eine Exception Allgemeine Java-Themen 13
M Wie kann ich ein int[] Array in einer Methode benutzen? Allgemeine Java-Themen 6
M Wie kann man eine void Methode mit Variablen von zwei verschiedenen Objekten ausführen? Allgemeine Java-Themen 15
F Was ist der Dateityp meines Parameters für die Main Methode. Allgemeine Java-Themen 6
F Variablen Palindromzahl (Probleme mit Methode) Allgemeine Java-Themen 9
B APi methode kurz anhalten Allgemeine Java-Themen 8
P Methode aus anderem Paket aufrufen Allgemeine Java-Themen 1
K ursprüngliche ArrayList ändert sich bei Übergabe in Methode Allgemeine Java-Themen 18
R Rekursive Methode Allgemeine Java-Themen 8
ReinerCoder Methode einer Klasse meldet Fehler "misplaced construct(s)" Allgemeine Java-Themen 13
R Wo ist mein Fehler in der Methode DRINGEND Allgemeine Java-Themen 9
I Collection - contains-Methode überschreiben (anonyme innere Klasse) Allgemeine Java-Themen 4
E RMI NULL-Pointer-Exeception wenn der RMI-Proxy eine Methode deligiert Allgemeine Java-Themen 2
S Methoden Liste soll Methode aus innerer Klasse aufrufen Allgemeine Java-Themen 4
M Methoden Generische Methode für ArrayList Allgemeine Java-Themen 7
D HTTP Aufruf einer Methode aus einem Servlet heraus Allgemeine Java-Themen 0
C Threads Methode verhält sich merkwürdig Allgemeine Java-Themen 18
R rekursive und iterative Methode Allgemeine Java-Themen 3
P Methoden Anwendung der allMatch()-Methode Allgemeine Java-Themen 5
G Programm, das nach abgearbeiteter main Methode weiterläuft Allgemeine Java-Themen 72
D Methoden Methode zum Steinschnitt Allgemeine Java-Themen 2
U OOP Warum kann ich aus meiner Methode keinen String auslesen Allgemeine Java-Themen 4
T Methoden Methode zum durchsuchen einer ArrayList Allgemeine Java-Themen 8
D Returnwert aus einer Methode gerundet ausgeben lassen Allgemeine Java-Themen 2
S equals-Methode bestimmer Klassen abfangen Allgemeine Java-Themen 2
H Methoden Methode 'updateItem' der Klasse 'TreeCell' Allgemeine Java-Themen 3
snipesss Methode greift nicht auf JTextPanel zu Allgemeine Java-Themen 3
R Methode in Methode voraussetzen Allgemeine Java-Themen 8
S Überschriebene Methode der Oberklasse der Oberklasse aufrufen. Allgemeine Java-Themen 5
D Methode dynamisch aufrufen Allgemeine Java-Themen 2
Sogomn Methode als Parameter? Allgemeine Java-Themen 3
M Eigene forEach()-Methode funktioniert nicht. Allgemeine Java-Themen 2
KaffeeFan Methoden Suche Methode um Programm kurz warten zu lassen Allgemeine Java-Themen 22
G Methoden Aus einem Event, wo ich weiß, dass es ausgeführt werden wird, eine Get-Methode basteln Allgemeine Java-Themen 8
BRoll Methode abbrechen (Invoke von außen) Allgemeine Java-Themen 5
I Methode verallgemeinern (Methode als Parameter)? Allgemeine Java-Themen 10
D generische Interface und konkrete Methode Allgemeine Java-Themen 3
G Threads Methode nebenbei ausführen, Status verarbeiten Allgemeine Java-Themen 4
H FTP Befehl/Java Methode für Submit im z/Os (Host) Allgemeine Java-Themen 1
M Fabrik Methode, gutes Beispiel? Allgemeine Java-Themen 0
M WebService - Zugriff auf Webservice Methode über Browser Allgemeine Java-Themen 1
N WaitForScript- methode in javafx Allgemeine Java-Themen 1
2 jede Stunde Methode ausführen Allgemeine Java-Themen 8
M Eine static-Methode verlassen Allgemeine Java-Themen 2
P "Overriden statische Methode" Statische Methode die vererbt wird Allgemeine Java-Themen 5
X Komponente an Methode übergeben Allgemeine Java-Themen 1
A Methode ergibt Java NullpointerException. Allgemeine Java-Themen 3
S Getestete Methode um das Beste aus URL-Nutzereingaben rauszuholen..? Allgemeine Java-Themen 4
L Methoden Methode gibt mir beim verschlüsseln mit RSA 0 bytes aus ? Allgemeine Java-Themen 1
D Methode mit optionalen Parametern in Interface Allgemeine Java-Themen 3
S Methode funktioniert nicht als ActionListener Allgemeine Java-Themen 4
M Methoden Methode Auslagern Allgemeine Java-Themen 6
P 4 Threads in einer Methode Allgemeine Java-Themen 2
A Methoden Generische Methode mit Arrays - Source Compatibility 1.7 benötigt, wieso? Allgemeine Java-Themen 3
N Methoden Methode Allgemeine Java-Themen 2

Ähnliche Java Themen

Neue Themen


Oben