MySQL Connection Global

powerLAN

Mitglied
Guten Tag,
Ich würde folgende Methode, die ich in jedem jDialog geschrieben habe global für alle in eine Klasse setzen und dann in jedem jDialog abrufen können, so dass ich nicht für jeden jDialog eine eigene Verbindung erstelle.
Hoffe ihr könnt verstehen was ich meine.

MfG

Code:
    public Registrieren(Window parent, boolean modal)
    {
        initComponents();
        systemConnection();
    }
   
    //Connection zu der MySQL Datenbank
    public void systemConnection()
    {
        try
        {
            Class.forName("com.mysql.jdbc.Driver");
            con = DriverManager.getConnection("jdbc:mysql://MySQLServer/Datenbank","benutzername","pw");
            stat = con.createStatement();
        } 
        catch (Exception e) 
        {
            JOptionPane.showMessageDialog(null,"Verbindung zur MySQL Datenbank konnte nicht hergestellt werden.");
        }
    }
Hier oben mal der Code aus einem jDialog.
So habe ich das in jedem anderen jDialog auch gemacht, aber wie gesagt, möchte ich das global machen, so dass ich nicht immer eine neue Verbindung aufbaue.
 

Jardcore

Top Contributor
Also möchtest du das mit jedem Öffnen einen Dialoges die gleiche Verbindung aufgebaut wird, oder möchtest du das deine Datenbankverbindung einfach beim Start deines Programmes einmal ausgeführt wird?

Ferner solltest du die GUI also die Dialoge und Fenster von deine Logik, dem Verbinden mit der Datenbank, möglichst trennen.

| GUI Klasse | --- verarbeite Klick --->| Logik Klasse | --- verbinden mit Datenbank
 

Joose

Top Contributor
Du könntest eine eigene Klasse schreiben, welche sich um die Datenbankverbindung und Zugriffe kümmert.
Dann bräuchtest du nur ein Objekt dieser Klasse erstellen.

Auch sollte eine Verbindung nur solange offen sein wie sie gebraucht wird, nicht mit öffnen/schließen eines Fensters.

Anmerkung: Generell sollte man UI und Logik Code trennen zum Beispiel anhand einer sauberen Schichtenarchitektur, oder wenns kleiner sein soll hilft auch MVC
 

powerLAN

Mitglied
Habe jetzt eine eigene Klasse geschrieben, nur habe keine Ahnung wie ich den Konstrukotr übergeben soll.. Bzw was ich in den Getter schreiben soll
Code:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;

public class MySQLConnection
{
    public Connection con;
    
    public void Connection()
    {
        try
        {
            Class.forName("com.mysql.jdbc.Driver");
            con = DriverManager.getConnection("jdbc:mysql://MySQLServer/db","benutzer","pw");
        }
        catch (SQLException ex)
        {
            ex.printStackTrace();
        }
        catch (ClassNotFoundException ex)
        {
            Logger.getLogger(MySQLConnection.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public MySQLConnection()
    {
        Connection();
    }
}
 

Joose

Top Contributor
.... nur habe keine Ahnung wie ich den Konstrukotr übergeben soll .. Bzw was ich in den Getter schreiben soll
Was bedeutet "Konstruktor übergeben"? Was willst du erreichen?
In welchen getter würdest du gerne was schreiben?

Du könntest nun deine Klasse um eine Methode "execute(String statement)" erweitern. Diese Methode führt dann das übergebene Statement aus.

Hinweis: Methoden beschreiben eine Tätigkeit und sollten auch dem entsprechend benannt werden. (Und beachte dass eig fast alles in Java in lowerCamelCase geschrieben werden, nur Klasse in UpperCamelCase)
Sprich statt "Connection" einfach "connect".
 

Jardcore

Top Contributor
Zuersteinmal Methoden Namen in Java werden im lowerCamelCase geschrieben. In deinem Fall nicht Connection(), sondern connection(). Besser wäre hier aber connect().

In den meisten Fällen sollten Instanzvariablen private und nicht public sein.
Habe jetzt eine eigene Klasse geschrieben, nur habe keine Ahnung wie ich den Konstrukotr übergeben soll.. Bzw was ich in den Getter schreiben soll
Deinen Konstruktor übergibst du nicht, sondern der wird aufgerufen.
zum Beispiel mit
Java:
MySQLConnection connection = new MySQLConnection();

"Getter" könntest du dann so gestalten das mit ihnen möglicherweise Querys ausgeführt werden. Das wären dann aber keine richtigen Getter sondern eher Methoden die dir helfen Daten aus der Datenbank zu bekommen. z.B: query(String statement).

Edit: Joose war wohl schneller :)
 

powerLAN

Mitglied
Also, ich habe ja die Methode 'connect', die eine Verbindung mit der Datenbank aufbaut. Und diese Verbindung möchte ich mit einem Konstruktoraufruf in jDialogen im gleichen Package aufrufen, sodass sie diese Verbindung nutzen können und auf die Datenbank zugreifen können.
 

powerLAN

Mitglied
Die Klasse in der ich eine Verbindung aufbaue:
Code:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;

public class MySQLConnection
{
    public Connection con;
       
    public void connect()
    {
        try
        {
            Class.forName("com.mysql.jdbc.Driver");
            con = DriverManager.getConnection("jdbc:mysql://Server/Datenbank","Benutzer","PW");
        } 
        catch (SQLException ex) 
        {
            ex.printStackTrace();
        } 
        catch (ClassNotFoundException ex)
        {
            Logger.getLogger(MySQLConnection.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
   
    public MySQLConnection()
    {
        connect();
    }
}
jDialog mit dem Konstruktoraufruf:
Code:
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;

public class Login extends javax.swing.JFrame
{
    public ResultSet res;
    public Statement stat;
    Registrieren reg = new Registrieren(this, true);
    Datenbankverwaltung dbv = new Datenbankverwaltung(this, true);
    DatenbankInformationen dbi = new DatenbankInformationen();
    MySQLConnection connect = new MySQLConnection();
   
    public Login()
    {
        initComponents();
    }

    //Überprüft ob der eingebene Benutzername zu dem Benutzername in der Datenbank passt
    public void checkbenutzername()
    {
        try
        {    
            String benutzername = jTextFieldBenutzername.getText().trim();
            String passwort = jPasswordFieldPasswort.getText().trim();
           
            String sql = "SELECT * FROM benutzer WHERE benutzername = '"+benutzername+"' AND passwort = '"+passwort+"'";

            res = stat.executeQuery(sql);
            //korrektur 
            int count = 0;
            while(res.next())
            {
                count = count + 1;
            }
           
            if(count == 1)
            {
                this.setVisible(false);
                dbv.setVisible(true);
            }
            else if(count > 1)
            {
                JOptionPane.showMessageDialog(null,"Der Account ist doppelt vorhanden.");
            }
            else
            {
                JOptionPane.showMessageDialog(null,"Login fehlgeschlagen!");
            }
           
        } 
        catch (SQLException ex)
        {
            Logger.getLogger(Login.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

Fehlermeldung:
Code:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at datenbankverwaltung_oberflaeche.Login.checkbenutzername(Login.java:56)
    at datenbankverwaltung_oberflaeche.Login.jButtonLoginActionPerformed(Login.java:183)
    at datenbankverwaltung_oberflaeche.Login.access$000(Login.java:16)
    at datenbankverwaltung_oberflaeche.Login$1.actionPerformed(Login.java:104)
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
    at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
    at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
    at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
    at java.awt.Component.processMouseEvent(Component.java:6505)
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3320)
    at java.awt.Component.processEvent(Component.java:6270)
    at java.awt.Container.processEvent(Container.java:2229)
    at java.awt.Component.dispatchEventImpl(Component.java:4861)
    at java.awt.Container.dispatchEventImpl(Container.java:2287)
    at java.awt.Component.dispatchEvent(Component.java:4687)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
    at java.awt.Container.dispatchEventImpl(Container.java:2273)
    at java.awt.Window.dispatchEventImpl(Window.java:2719)
    at java.awt.Component.dispatchEvent(Component.java:4687)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:735)
    at java.awt.EventQueue.access$200(EventQueue.java:103)
    at java.awt.EventQueue$3.run(EventQueue.java:694)
    at java.awt.EventQueue$3.run(EventQueue.java:692)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
    at java.awt.EventQueue$4.run(EventQueue.java:708)
    at java.awt.EventQueue$4.run(EventQueue.java:706)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:705)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)
BUILD SUCCESSFUL (total time: 7 seconds)
 

Jardcore

Top Contributor
Ich kenne mich mit jdbc nicht so aus, aber müsstest du nicht bei "stat.executeQuery(sql);" stat irgendwo noch initalisieren.
Wenn du die Connection deiner MySqlConnection() haben möchtest brächte deine Klasse wohl doch noch einen Getter getConnection(). Dieser gibt dir dann die Instanzvariable Connection zurück. In deinem Fall "con".
 

Joose

Top Contributor
Das habe ich gemacht nur bekommt der Konstruktor dann immer 'null'.
Was heißt der Konstruktor bekommt "null"? Ein Konstruktor ist eine spezielle und kann Parameter übergeben bekommen.

Im Zusammenhang mit der NullPointerException vom nächsten Post macht dies natürlich mehr Sinn ;)

Code:
    public ResultSet res;
    public Statement stat;
......
            String sql = "SELECT * FROM benutzer WHERE benutzername = '"+benutzername+"' AND passwort = '"+passwort+"'";

            res = stat.executeQuery(sql);
            //korrektur

Code:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at datenbankverwaltung_oberflaeche.Login.checkbenutzername(Login.java:56)

Wie Jardcore schon angemerkt hat ist die Variable "stat" nicht initialisiert. Daher versuchst du auf "null" zuzugreifen und davon eine Methode aufzurufen.
-> NullPointer
Der StackTrace hat dir auch genau verraten wo die Exception passiert -> Dateiname + Zeile.
 

powerLAN

Mitglied
Habe meine Klasse jetzt so gebaut:

Code:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.logging.Level;
import java.util.logging.Logger;

public class MySQLConnection
{
    public Connection con;
    public Statement stat;  
   
    public void connect()
    {
        try
        {
            Class.forName("com.mysql.jdbc.Driver");
            con = DriverManager.getConnection("jdbc:mysql://Server/Datenbank","Benutzer","PW");
            stat = con.createStatement();  
        } 
        catch (SQLException ex) 
        {
            ex.printStackTrace();
        } 
        catch (ClassNotFoundException ex)
        {
            Logger.getLogger(MySQLConnection.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
   
    public MySQLConnection()
    {
        connect();
    }
   
    public Connection getConnection()
    {
        return this.con;
    }
}
 

powerLAN

Mitglied
Habe es jetzt hinbekommen. Lag daran, dass das Statement nicht initialisiert war..
Code:
            String sql = "SELECT * FROM benutzer WHERE benutzername = '"+benutzername+"' AND passwort = '"+passwort+"'";

            stat = connect.getConnection().createStatement();
          
            res = stat.executeQuery(sql);
Das einzige was ich machen musste war:
Code:
stat = connect.getConnection().createStatement();
 

Joose

Top Contributor
Hinweis: Du baust dir hier dein Statement mit einfacher Stringverkettung zusammen.
Das ist sehr gefährlich und anfällig für SQL Injection.
Für ein Testprogramm vielleicht nicht zu beachten, sobald du aber etwas davon produktiv verwenden willst solltest du auf PreparedStatements umsteigen!
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
yakazuqi MySQL MySQL Connection reset Datenbankprogrammierung 7
D MySQL Connection richtig herstellen. Wie ? Datenbankprogrammierung 7
D Multiple Connection mit MySQL Datenbankprogrammierung 4
W MySQL-Connection-Objekt übergeben Datenbankprogrammierung 2
B MySQL Fehler: Cannot open connection mit Tomcat7, Hibernate und MySQL Datenbankprogrammierung 4
S Java Connection to MySQL Datenbank FunPic Datenbankprogrammierung 4
H DB-Connection zu MySQL Datenbankprogrammierung 12
G MySQL Connection Problem Datenbankprogrammierung 3
R sql.Connection vs. mysql.Connection Datenbankprogrammierung 3
F Connection refused: connect Bei Verbindungsherstellung zu MySQL Datenbank Datenbankprogrammierung 3
F MySQL - Connection JDBC-Driver Problem Datenbankprogrammierung 4
D Probleme mit mysql-Connection Datenbankprogrammierung 10
K "Connection timed out: connect" bei MySQL-Verbindu Datenbankprogrammierung 10
J Keine Connection zur MySQL Db Datenbankprogrammierung 6
T problem mit mysql connection Datenbankprogrammierung 6
M [MYSQL] Problem mit Connection und Abfrage Datenbankprogrammierung 6
Juelin Java und MySQL MariaDB - WHERE-Klausel Datenbankprogrammierung 17
W MySQL-Connector funktioniert nicht über WLAN -> MacOS Datenbankprogrammierung 10
Juelin MySQL Datenbankmit glassfish und Netbeans Datenbankprogrammierung 18
Auf MySql Datenbank zugreifen funktioniert nicht Datenbankprogrammierung 8
TheSkyRider MySQL Datenbankzuordnung in Verbindung mit Java Datenbankprogrammierung 7
Warum funktioniert MySQL nicht Datenbankprogrammierung 8
M MySQL Datenbank in Array Datenbankprogrammierung 2
P MySQL- Neues Passwort Datenbankprogrammierung 1
btwX28 mysql abfrage über phpmyadmin Datenbankprogrammierung 8
sserio SQL oder MySQL Datenbankprogrammierung 44
OnDemand Mysql Query Builder Datenbankprogrammierung 1
Z MySQL "Too many connections" auch nach schliessen der Connections. Datenbankprogrammierung 10
OnDemand MySql Foreign Key nötig oder unnötig Datenbankprogrammierung 3
M Mysql Views und Hibernate Caching Datenbankprogrammierung 4
W MYSQL Datenbank Login Android Datenbankprogrammierung 3
OnDemand MySQL und mongoDB wann macht was Sinn? Datenbankprogrammierung 11
bueseb84 Spring Boot : Update Mysql Datenbank Datenbankprogrammierung 1
Avalon Attribute werden mit Unterstrich in eine MySQL Datenbank eingetragen Datenbankprogrammierung 10
D MYSQL goorm IDE - Wie speichern? Datenbankprogrammierung 0
OnDemand Mysql UPDATE if condition Datenbankprogrammierung 14
D MySQL Geburtsdatum per KW abfragen Datenbankprogrammierung 1
C Java MySQL check if value exists in database Datenbankprogrammierung 2
H Fehler bei getConnection zu MySQL Datenbank Datenbankprogrammierung 18
J MySQL - Primary Key Date,Time vs ID Datenbankprogrammierung 16
ruutaiokwu MySQL: Messwerte, welche stagnieren interpolieren? Datenbankprogrammierung 2
S Datenbank MySQL und Java Datenbankprogrammierung 8
Thallius MySQL JDBC auf Linux Server zu mySQL DB auf anderem Linux Server wirft Access denied Datenbankprogrammierung 5
P Adressadministration mit Java und mySQL Datenbankprogrammierung 14
D MySQL Abfrage Datenbankprogrammierung 5
D MySQL Abfrage sortieren Datenbankprogrammierung 4
platofan23 MySQL Java Programm findet Treiber für mySQL auf Debian-Server nicht? Datenbankprogrammierung 11
J MySQL MySQL Risiken bei Stromausfall minimieren Datenbankprogrammierung 9
D MySQL Abfrage SUM datediff Datenbankprogrammierung 3
H MySQL MySQL - Keine Verbindung zur Datenbank?! Datenbankprogrammierung 4
G MySQL Problem mit MySQL verbindung Datenbankprogrammierung 8
X MySQL Java hat keinen Zugriff auf MySQL Datenbankprogrammierung 9
Z [JDBC][MYSQL] Access denied Datenbankprogrammierung 7
D MySQL Eibinden des "mysql-connector" in eine fertige Jar Datenbankprogrammierung 3
L MySQL Android zu externer MySQL Datenbank verbinden Datenbankprogrammierung 5
P Daten in eine mySQL Datenbank einfügen Datenbankprogrammierung 4
D MySQL Zeilen kumulieren Datenbankprogrammierung 8
D MySQL Abfrage mit kumulierten Werten Datenbankprogrammierung 16
K Servlet-MySQL DB Datenbankprogrammierung 2
X MySQL Json String in MySQL einfügen. Datenbankprogrammierung 20
OnDemand Update auf Mysql läuft nicht durch Datenbankprogrammierung 30
K Java Object mit Hibernate in MySQL abspeichern Datenbankprogrammierung 1
D Datumsformat aus MySQL ändern Datenbankprogrammierung 15
G MySQL Java Problem: Nullpointer Exception obwohl Daten vorhanden sind? Datenbankprogrammierung 2
K MySQL LAN-MySQL Server mit XAMPP Datenbankprogrammierung 2
R ERModel der Datebanken (ORACLE,MySQL,MS-SQL usw) Datenbankprogrammierung 4
X MySQL In MySQL Funktionen erstellen, wenn Zelle leer dann andere Zelle ändern? Datenbankprogrammierung 9
K Anfängerfrage CSV in MySQL Datenbankprogrammierung 41
I MySQL Wert nachträglich bearbeiten Datenbankprogrammierung 1
N MySQL Datenbank lokal Datenbankprogrammierung 3
B MySQL: Port ändern über GUI? Wo und wie Port ändern? Datenbankprogrammierung 0
B MySQL installieren - silent / User anlegen Datenbankprogrammierung 3
X MySQL Verbindungdsaufbau MySql auf Ubuntu-Server Datenbankprogrammierung 10
F MySQL Wie kann ich in Java Datensätze aus einer MySQL Datenbank gezielt in einzelne Arrays schreiben? Datenbankprogrammierung 9
P MySQL JPA / MySQL - Fehler bei type=innoDB Datenbankprogrammierung 8
M MySQL MySQL DATETIME-Import Datenbankprogrammierung 9
J mySQL- Java Application - Zugriff über Internet Datenbankprogrammierung 3
P MySQL-Verbindung in anderer Klasse nutzen Datenbankprogrammierung 2
D JavaFX Anwendung zugriff auf MySQL DB. Datenbankprogrammierung 2
D MySQL Grundsätzliche Fragen zu MySQL Datenbankprogrammierung 3
B MySQL LogIn Daten im Code verstecken Datenbankprogrammierung 3
M MySQL-Syntax-Fehler Datenbankprogrammierung 1
M In MySql Datenbank schreiben Datenbankprogrammierung 6
D mySQL Timestamp in RegularTimePeriod bzw Second Datenbankprogrammierung 3
H SHOW Tables in Java/MySQL Datenbankprogrammierung 8
windl MySQL und HSQLDB Datenbankprogrammierung 4
S Anbindung zur mysql von mit Swing und AWT Datenbankprogrammierung 22
F MySQL+ Netbeans: Datenbanken mit Automatisch generierten Entity Classes get und set Datenbankprogrammierung 2
I MySQL Hibernate / MySQL alias in WHERE clause Datenbankprogrammierung 1
C MYSQL kann wert nicht eintragen Datenbankprogrammierung 3
D Aktualisierung einer ListView mit Daten aus MySQL-DB Datenbankprogrammierung 5
F BPlaced MySql Datenbank ansprechen Datenbankprogrammierung 5
S MySQL MySQL will einfach nicht, bitte um Rat Datenbankprogrammierung 4
M MySQL Datenbank durchsuchen Datenbankprogrammierung 5
Z MySQL mysql Facharbeit: Tipps und Ideen gesucht Datenbankprogrammierung 5
dat_vin JavaFX Datenbankverbindung über JPA und MySQL Error Datenbankprogrammierung 0
K MySQL Datenbank 2facher Zugriff Datenbankprogrammierung 1
Z MySQL Shopsystem mit mysql und Java Datenbankprogrammierung 8
S [MySQL] Topliste Datenbankprogrammierung 2
H Datenbank-Anbindung Java/MySQL Datenbankprogrammierung 2

Ähnliche Java Themen

Neue Themen


Oben