Verschiede Aktionen der Datenbank getrennt durchführen

DaCrazyJavaExpert

Bekanntes Mitglied
Hey,
ich habe hier diesen Code einer Datenbank:
Java:
package de.m_ver.cookieclicker.database;

import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import de.m_ver.cookieclicker.gui.CookieClickerGUI;

public class Database {

    private final static String CREATE_DATA_TABLE = "CREATE TABLE COOKIE_VALUES ("
            + "ID INT NOT NULL GENERATED BY DEFAULT AS IDENTITY, " + "COOKIES_PRO_KLICK INT, " + "ANZAL_COOKIES INT, "
            + "PRIMARY KEY (ID) " + ")";
    private final static String ADD_INSTRUCTIONS = "INSERT INTO COOKIE_VALUES VALUES (DEFAULT, ?, ?)";

    private static String id;
    private static int cookies_Pro_Klick;
    private static int anzahl_Cookies;

    public static int getCookies_Pro_Klick() {
        return cookies_Pro_Klick;
    }

    public static void setCookies_Pro_Klick(int cookies_Pro_Klick) {
        Database.cookies_Pro_Klick = cookies_Pro_Klick;
    }

    public static int getAnzahl_Cookies() {
        return anzahl_Cookies;
    }

    public static void setAnzahl_Cookies(int anzahl_Cookies) {
        Database.anzahl_Cookies = anzahl_Cookies;
    }

    private static Connection createConnection() throws ClassNotFoundException, SQLException {
        Class.forName("org.apache.derby.jdbc.EmbeddedDriver");
        Connection connection = DriverManager.getConnection("jdbc:derby:database/cookie;create=true");
        return connection;
    }

    public static void registerConnectionInListener() {
        try (Connection connection = createConnection()) { //#
            DatabaseMetaData metaData = connection.getMetaData();//#
            ResultSet tables = metaData.getTables(null, "APP", "COOKIE_VALUES", null);//#
            if (!tables.next()) {//#
                Statement instructions = connection.createStatement();//#
                instructions.executeUpdate(CREATE_DATA_TABLE);//#
                instructions.close();//#
            }
            PreparedStatement insertStatement = connection.prepareStatement(ADD_INSTRUCTIONS);//*
            insertStatement.setInt(1, CookieClickerGUI.getCookiesProClick());//*
            insertStatement.setLong(2, CookieClickerGUI.getAnzahlCookies());//*
            insertStatement.executeUpdate();//*
            PreparedStatement queryInstructions = connection.prepareStatement("SELECT * FROM COOKIE_VALUES");//*
            ResultSet resultSet = queryInstructions.executeQuery();//*
            while (resultSet.next()) {//*
                id = resultSet.getString("ID");//*
                cookies_Pro_Klick = resultSet.getInt("COOKIES_PRO_KLICK");//*
                anzahl_Cookies = resultSet.getInt("ANZAL_COOKIES");//*
            }
        } catch (ClassNotFoundException e) { //Und der Teil ab hier muss halt irgendwie trotzem passen.
            System.err.println("Database driver not found!");
        } catch (SQLException e) {
            System.err.println("SQL error");
            e.printStackTrace();
        }
    }

    public static String getId() {
        return id;
    }

    public static void setId(String id) {
        Database.id = id;
    }
}
Ich möchte den Teil den ich jetzt oben im Code mit '#' makiert habe in meiner GUI-Klasse im Listener haben.
Jedesmal wenn der Listener in Aktion kommt, soll der '#' Teil ausgeführt werden.
Hier nochmal der Listener:
Java:
private void registerCookieListener() {
        this.lblCookie.addMouseListener(new MouseListener() {

            @Override
            public void mouseReleased(MouseEvent e) {
                lblCookieClicked.setVisible(false);
                lblCookie.setVisible(true);
                Database.registerConnectionInListener(); // Dies hier funktioniert nicht so recht, also einfach nicht beachten
            }

            @Override
            public void mousePressed(MouseEvent e) {
                anzahlCookies += cookiesProClick;
                lblAnzahlCookies.setText("Cookies: " + anzahlCookies);
                lblCookie.setVisible(false);
                lblCookieClicked.setVisible(true);
            }
Den Teil den ich mit '*' makiert habe, möchte ich in der Main Methode haben.
Jedes mal wenn das Programm gestartet wird, soll also der '*' Teil ausgeführt werden, also die Daten aus der Datenbank abgerufen werden.
Hier die Main:
Java:
public class Main {

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    CookieClickerGUI frame = new CookieClickerGUI();
                    frame.start();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }
}

Ich hab veruscht die beiden Teile in eine einzelne Methode zu packen, allerding klappt dass mit dem initialisieren von "connection" nicht so gut und generell der ganze catch block wäre "kaputt". Hat jemand ein Vorschlag wie ich die beiden Teile getrennt ausführen kann, ohne den kompletten Code neuschreiben zu müssen oder andere große Veränderungen vornehemen zu müssen.

Ich hoffe ich hab mein Problem einigermaßen gut erklärt. Ansonsten fragt bitte nach :). Danke!
 
Zuletzt bearbeitet von einem Moderator:

DaCrazyJavaExpert

Bekanntes Mitglied
den catch-Block doppelt haben
Den try () - Teil dann auch? Oder hab ich da was falsch verstanden. Jedenfalls klappts nicht so wie ich will. Die Daten werden entweder nicht geladen/in die Datenbank eingetragen, oder, was ich glaube, ich habe das Auslesen + Einlesen der Daten einfach irgendwie falsch implementiert. Soll ich mal meine kompletten Code posten, weil ich komm nicht drauf, was ich da falsch mache. Allerdings geht mein kompletter Code über ca. 500 - 600 Zeilen. Das will ich euch eigentlich nicht antun. Hat eventuell jemand ein Tipp was ich eventuell Falsch gemacht habe? Oder ist im obigen Code irgendein Fheler aufzufinden, welchen ich übersehen habe. Meines Erachtens, liegt der Fehler nämlich in der Implementierung der Methoden/Zeilen, und nicht am Fehlerhaften Code.
Danke
 

mrBrown

Super-Moderator
Mitarbeiter
Ja, den try-Block logischerweise auch.

Generell seh ich da keinen schlimmen Fehler, du solltest die Methode problemlos trennen können.
Man könnte das besser aufbauen - die Methode muss man aber trotzdem spalten, und das geht auch so
 

DaCrazyJavaExpert

Bekanntes Mitglied
Ok Danke. Ich hab es jetzt so in die zwei Methoden geteilt:
Java:
    private static Connection createConnection() throws ClassNotFoundException, SQLException {
        Class.forName("org.apache.derby.jdbc.EmbeddedDriver");
        Connection connection = DriverManager.getConnection("jdbc:derby:database/cookie;create=true");
        return connection;
    }

    public static void registerConnectionInMain() {
        try (Connection connection = createConnection()) {
            DatabaseMetaData metaData = connection.getMetaData();
            ResultSet tables = metaData.getTables(null, "APP", "COOKIE_VALUES", null);
            if (!tables.next()) {
                Statement instructions = connection.createStatement();
                instructions.executeUpdate(CREATE_DATA_TABLE);
                instructions.close();
            }
        } catch (ClassNotFoundException e) {
            System.err.println("Database driver not found!");
        } catch (SQLException e) {
            System.err.println("SQL error");
            e.printStackTrace();
        }
    }

    public static void registerConnectionInListener() {
        try (Connection connection = createConnection()) {
            PreparedStatement insertStatement = connection.prepareStatement(ADD_INSTRUCTIONS);
            insertStatement.setInt(1, CookieClickerGUI.getCookiesProClick());
            insertStatement.setLong(2, CookieClickerGUI.getAnzahlCookies());
            insertStatement.executeUpdate();
            PreparedStatement queryInstructions = connection.prepareStatement("SELECT * FROM COOKIE_VALUES");
            ResultSet resultSet = queryInstructions.executeQuery();
            while (resultSet.next()) {
                id = resultSet.getString("ID");
                cookies_Pro_Klick = resultSet.getInt("COOKIES_PRO_KLICK");
                anzahl_Cookies = resultSet.getInt("ANZAL_COOKIES");
            }
        } catch (ClassNotFoundException e) {
            System.err.println("Database driver not found!");
        } catch (SQLException e) {
            System.err.println("SQL error");
            e.printStackTrace();
        }
    }
Bei der ersten Methode [wird ja(?)], sollen die Daten bei Programmstart aufgerufen werden. :
Java:
public class Main {

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    CookieClickerGUI frame = new CookieClickerGUI();
                    frame.start();
                    Database.registerConnectionInMain();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }
}
Und bei einem Klick auf den Keks(in meinem Fall), wird die Datenbank immer aktualisiert:
Java:
            @Override
            public void mouseReleased(MouseEvent e) {
                lblCookieClicked.setVisible(false);
                lblCookie.setVisible(true);
                Database.registerConnectionInListener();
            }
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
F Variablen Variable durch die direkt auf verschiede Objekte zugegriffen werden kann Java Basics - Anfänger-Themen 5
S verschiede constructoren über reflection Java Basics - Anfänger-Themen 3
N ein Array in zwei verschiede TextAreas darstellen Java Basics - Anfänger-Themen 6
S Aktionen verzögern Java Basics - Anfänger-Themen 9
M Windows Aktionen abfangen Java Basics - Anfänger-Themen 3
S Aktionen Zahlen zuweisen Java Basics - Anfänger-Themen 3
U Aktionen zwischen zwei Klassen: Bester Weg? Java Basics - Anfänger-Themen 10
F Buttons und Aktionen Java Basics - Anfänger-Themen 20
0 TicTacToe, Problem mit den Checkbox-Aktionen Java Basics - Anfänger-Themen 6
M Erneutes Ausführen bestimmter Aktionen (GoTo-Alternative) Java Basics - Anfänger-Themen 6
G Gleiche Aktionen verarbeiten (aber nur einmal Code)? Java Basics - Anfänger-Themen 2
G ActionListener - Aktionen vor/beim Schließen? Java Basics - Anfänger-Themen 9
G Aktionen auslösen, nach Klick auf "Blätter" eines Java Basics - Anfänger-Themen 2
V Aktionen für mehrere CheckBoxes Java Basics - Anfänger-Themen 4
G Maus+Tastatur aktionen simulieren? Java Basics - Anfänger-Themen 5
I Erste Schritte Einfache Datenbank-Webseite erstellen als Nicht-IT-lerin Java Basics - Anfänger-Themen 24
M Daten aus errechneter Methode in Datenbank(SQLite) schreiben Java Basics - Anfänger-Themen 60
S Best Practice Fragen zu Projektstruktur einer Datenbank-Abfrage-App (MVC) Java Basics - Anfänger-Themen 13
I Element n aus Datenbank Query (JPA / Hibernate) Java Basics - Anfänger-Themen 3
I Passwort in Datenbank speichern um später wieder auszulesen Java Basics - Anfänger-Themen 5
S OOP Java Eingabe in verschiedene Datenbank Tabellen eintragen Java Basics - Anfänger-Themen 7
I H2 Datenbank starten / Daten in File speichern Java Basics - Anfänger-Themen 25
E schneller von der Datenbank abfragen Java Basics - Anfänger-Themen 15
E Datenbank Spalte zusammenzählen Java Basics - Anfänger-Themen 2
R Datenbank Java Basics - Anfänger-Themen 1
I API Key´s in der Datenbank decrypt / encrypten? Java Basics - Anfänger-Themen 23
I Werte (u.a. Geldbeträge) in Datenbank speichern und Rundungen? Java Basics - Anfänger-Themen 8
M Mehrere Datenbank zugriffe über tomee.xml regeln? Java Basics - Anfänger-Themen 1
M Datenbank oder Textdatei? Java Basics - Anfänger-Themen 4
S Datenbank Befehl nach Login Java Basics - Anfänger-Themen 5
S Datenbank Tabelle eine Zeile an einer bestimmten Stelle einfügen Java Basics - Anfänger-Themen 2
M Von der Datenbank zum Textfield Java Basics - Anfänger-Themen 16
R Best Practice Logik in der Datenbank oder in Java? Java Basics - Anfänger-Themen 3
R Datenbank-Werte dynamisch ausgeben Java Basics - Anfänger-Themen 19
B Frage zu Datenbank Design - Rechnungen, Angebote... und deren Positionen Java Basics - Anfänger-Themen 4
B Datenbank: Entity mit vielen Referenzen? Ansatz so ok? Java Basics - Anfänger-Themen 8
T Datenbank | Welche am Sinnvollsten? Java Basics - Anfänger-Themen 5
S Daten speichern, ohne Datenbank Java Basics - Anfänger-Themen 8
L Daten aus ArrayList in Datenbank durchsuchen Java Basics - Anfänger-Themen 5
M Datenbank in jTable Laden Java Basics - Anfänger-Themen 49
M Datenbank verbindung Java Basics - Anfänger-Themen 19
J Java Verbindung mit mysql Datenbank Java Basics - Anfänger-Themen 3
B Datenbank, aktuelle Ende als Zahl an Label übergeben Java Basics - Anfänger-Themen 7
T Collections Geeignete Collection/Liste/Datenbank Java Basics - Anfänger-Themen 17
B Treetable (rekursive Funktion) aufbauen von Datenbank Java Basics - Anfänger-Themen 4
R Input/Output Verbindung mit mySql-Datenbank Java Basics - Anfänger-Themen 9
D Compiler-Fehler Wert auf Datenbank übertragen und Sleep Thread Java Basics - Anfänger-Themen 3
N (Java) Regristrierung und Login System mit einer Datenbank Java Basics - Anfänger-Themen 5
J Datenbank Zugriff Java Basics - Anfänger-Themen 24
J Mit JSF Formular in Datenbank schreiben Java Basics - Anfänger-Themen 3
DaCrazyJavaExpert Datenbank wird nicht erstellt Java Basics - Anfänger-Themen 31
E Daten gehen nicht in Datenbank Java Basics - Anfänger-Themen 14
C JTable update mit MySQL Datenbank Java Basics - Anfänger-Themen 1
Meeresgott OOP Gui, Logik und Datenbank richtig aufbauen Java Basics - Anfänger-Themen 43
B Schreiben von zu vielen Einträgen in einer Datenbank Java Basics - Anfänger-Themen 9
S Datenbank auf Knopfdruck abfragen Java Basics - Anfänger-Themen 8
M Java als Webanwendung mit Datenbank abfrage Java Basics - Anfänger-Themen 3
N Datenbank mit GUI verbinden - Wie? Java Basics - Anfänger-Themen 5
1 Datenbank in Java Java Basics - Anfänger-Themen 1
M Erste Schritte Java Applet - HTML Seiten auslesen und in Access Datenbank schreiben? Java Basics - Anfänger-Themen 15
J Bücher Datenbank Java Basics - Anfänger-Themen 5
S Best Practice MVC und große Datenmengen aus einer mySQL - Datenbank Java Basics - Anfänger-Themen 24
J Datum und Uhrzeit in Datenbank falsch hinterlegt Java Basics - Anfänger-Themen 13
R Erstversuch Datenbank Java Basics - Anfänger-Themen 6
I Daten speichern ohne Datenbank Java Basics - Anfänger-Themen 20
A Erste Schritte Verbindung zu MySQL Datenbank herstellen Java Basics - Anfänger-Themen 7
T Sql Datenbank - variable übergeben? Java Basics - Anfänger-Themen 8
C Passwörter möglichst sicher in Datenbank speichern Java Basics - Anfänger-Themen 18
W Erste Schritte Exceltabelle in Datenbank übertragen mittels XDEV Java Basics - Anfänger-Themen 7
J GUI mit phpMyAdmin Datenbank verbinden Java Basics - Anfänger-Themen 0
K Erste Schritte Datenbank SQL erklärung Java Basics - Anfänger-Themen 15
B Lokale Datenbank Java Java Basics - Anfänger-Themen 2
B Klassen Doppelte werte Filtern XML, Datenbank und DOM Java Basics - Anfänger-Themen 3
Todesbote Int Array mit Hibernate in Datenbank speichern. Java Basics - Anfänger-Themen 2
U Datenbank in Java Java Basics - Anfänger-Themen 8
M Keine Datenbank verbindung Java Basics - Anfänger-Themen 14
N mit Werten aus einer mysql datenbank in java rechnen Java Basics - Anfänger-Themen 17
Q Datenbank nicht über separaten Server Java Basics - Anfänger-Themen 4
B Dateiname in Datenbank schreiben Java Basics - Anfänger-Themen 2
J fortlaufende Objekte durch Variable auswählen; Datenbank Java Basics - Anfänger-Themen 4
S ArrayList in mysql Datenbank speichern Java Basics - Anfänger-Themen 6
C Datenbank - Welche Java Basics - Anfänger-Themen 5
B Java Objektorientierte Datenbank - Assoziation Hilfe Java Basics - Anfänger-Themen 4
G Input/Output Serialisierung oder Datenbank Java Basics - Anfänger-Themen 6
J Erste Schritte Objekte in Datenbank speichern Java Basics - Anfänger-Themen 26
A Android Datenbank gaaanz einfaches Insert geht nicht - warum? Java Basics - Anfänger-Themen 4
L Erste Schritte Datenbank Zugangsdaten sicher? Java Basics - Anfänger-Themen 15
S Input/Output Primzahlen Datenbank Java Basics - Anfänger-Themen 11
B Mit Java-Programm Daten aus MySQL-Datenbank auslesen, lokal und nicht lokal. Java Basics - Anfänger-Themen 10
K Input/Output Datenbank Java Basics - Anfänger-Themen 27
M Datenbank in die Gui Java Basics - Anfänger-Themen 4
J JTable mit Daten aus Datenbank füllen Java Basics - Anfänger-Themen 3
F Erfassung von PCs in eine SQLite-Datenbank über JDBC Java Basics - Anfänger-Themen 9
T Datenbank Abfrage Exception Null Java Basics - Anfänger-Themen 2
M Brauche ich ein Datenbank oder nicht? Java Basics - Anfänger-Themen 6
D JDBC Datenbank fail?! Java Basics - Anfänger-Themen 20
A Problem beim einfügen in eine Datenbank Java Basics - Anfänger-Themen 2
F Classpath Datenbank ... nur wo? Java Basics - Anfänger-Themen 24
H Datenbank suche in kleine Schritte Java Basics - Anfänger-Themen 6
B Personalnummer aus Datenbank Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben