Derby/JavaDB Unfindbarer Fehler im Datenbank-Code

DaCrazyJavaExpert

Bekanntes Mitglied

DaCrazyJavaExpert

Bekanntes Mitglied
Also die nimmt die Variablen aus der GUI:
Java:
    public void save() {
        try(Connection connection = createConnection()) {
            PreparedStatement updateValues = connection.prepareStatement(UPDATE_VALUES);
            updateValues.setInt(1, guiVarObject.getCookiesProClick()); // cookiesProClick ist eine Varaible aus der GUI Klasse
            updateValues.setLong(2, guiVarObject.getAnzahlCookies()); // anzahlCookies ist eine Varible aus der GUI-Klasse
            updateValues.executeUpdate();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
 

JStein52

Top Contributor
Deine Klasse Database sollte jetzt die o.g. beiden Attribute haben, dann einen Konstruktor der die Tabelle neu anlegt und/oder per Select die Daten liest. Dann sollte sie getter und setter für die beiden Attribute haben und eine save()-Methode. Zugriff auf irgendwas von GUI sollte da nicht mehr drin sein.
 

DaCrazyJavaExpert

Bekanntes Mitglied
Ich könnte das noch machen, ergibbt allerdings keinen Sinn, da...
Java:
try(Connection connection = createConnection()) {
        PreparedStatement updateValues = connection.prepareStatement(UPDATE_VALUES);
        updateValues.setInt(1, cookies_Pro_Klick);
        updateValues.setLong(2, anzahl_Cookies);
        updateValues.executeUpdate();
Die beiden Variablen die Daten aujs der Datenbank enthalten und gar nicht aktualisiert werden.
Java:
    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"); // Daten holen
                anzahl_Cookies = resultSet.getLong("ANZAHL_COOKIES"); // Daten holen
                guiVarObject.setCookiesProClick(cookies_Pro_Klick); // Daten in GUI schreiben
                guiVarObject.setAnzahlCookies(anzahl_Cookies); // Daten in GUI schreiben
            }
 

JStein52

Top Contributor
In deiner GUI - Klasse sollten jetzt die beiden Attribute anzahlCookies und coopiesProClick nicht (!) mehr drin sein, statt dessen ein Attribut database. Statt dessen hat sie einen Konstruktor der zunächst ein database anlegt, dann per get sich von database die Attribute holt, dann die GUI aufbaut und einen Listener der die Textfelder ausliest, irgendwas damit macht (inkrementiert), dann per set in database speichert und save zum speichern in der Datenbank aufruft.
 

DaCrazyJavaExpert

Bekanntes Mitglied
Und außerdem hab ich grade ein Error, ein StackOverflowError, welcher auf das hier:
Java:
public class CookieClickerGUI extends JFrame {
   
    Database database = new Database(); //HIer
Und dass hier:
Java:
public class Database {

    private  CookieClickerGUI guiVarObject = new CookieClickerGUI();
verweist.
 

JStein52

Top Contributor
Code:
            while (resultSet.next()) {
                id = resultSet.getString("ID");
                cookies_Pro_Klick = resultSet.getInt("COOKIES_PRO_KLICK"); // Daten holen
                anzahl_Cookies = resultSet.getLong("ANZAHL_COOKIES"); // Daten holen
                guiVarObject.setCookiesProClick(cookies_Pro_Klick); // Daten in GUI schreiben
                guiVarObject.setAnzahlCookies(anzahl_Cookies); // Daten in GUI schreiben
            }
das gesamte guiVarObject fliegt aus der Database raus
 

JStein52

Top Contributor
Aber die stehen jetzt in der Klasse Database und du hast getter und setter um sie dort zu lesen und zu ändern. Also brauchst du sie nicht in der GUI
 

DaCrazyJavaExpert

Bekanntes Mitglied
Aso. Und die save() Methode muss in den Listener? Also die sieht momentan so aus:
Java:
    public void save() {
        try(Connection connection = createConnection()) {
        PreparedStatement updateValues = connection.prepareStatement(UPDATE_VALUES);
        updateValues.setInt(1, cookies_Pro_Klick);
        updateValues.setLong(2, anzahl_Cookies);
        updateValues.executeUpdate();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
Ich hoffe das hab ich jetzt richtig :eek:.

Und hier der Momentane Konstruktor der Klasse Database:
Java:
    public Database() {
        this.createTablePlusSelect();
        this.save();
    }
+ hier die Methode createTablePlusSelect() :
Java:
    public  void createTablePlusSelect() { // bei Programmstart werden alle Daten in die GUI eingetragen
        try (Connection connection = createConnection()) {
            DatabaseMetaData metaData = connection.getMetaData();
            ResultSet tables = metaData.getTables(null, "APP", "COOKIE_VALUES", null);
            if (!tables.next()) { // Nur erstellen wenn Datenbank noch nicht vorhanden ist
                Statement instructions = connection.createStatement();
                instructions.executeUpdate(CREATE_DATA_TABLE);
                PreparedStatement insertStatement = connection.prepareStatement(ADD_INSTRUCTIONS);
                insertStatement.setInt(1, 1); // aus Programm (GUI) holen, in Datenbank setzten
                insertStatement.setLong(2, anzahl_Cookies);
                insertStatement.executeUpdate();
                instructions.close();
            }

            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"); // Daten holen
                anzahl_Cookies = resultSet.getLong("ANZAHL_COOKIES"); // Daten holen
            }
        } catch (ClassNotFoundException e) {
            System.err.println("Database driver not found!");
        } catch (SQLException e) {
            System.err.println("SQL error");
            e.printStackTrace();
        }
    }
Soweit so gut.
Und wo muss ich denn jetzt die Inztanz von Database hinplazieren? In den Konstruktor der GUI-Klasse?

Und dadurch wird sogar immer anzahlCookies + 1 addiert. Allerdings wird cookiesProClick nicht als 1 sondern 0 angezeigt, ich hoffe verständlich was ich meine. Wie ändere ich das?
 

JStein52

Top Contributor
die save() Methode muss in den Listener
Die save()-Methode wird im Listener aufgerufen, nachdem du mit database.setAnzahlCookies und database.set... aufgreufen hast.
Im Konstruktor von Database brauchst du natürlich nicht gleich nach dem Laden wieder save aufzurufen, das bringt nichts. Und eine Instanz von Database legst du im Konstruktor deiner GUI an. Das hattest du doch schon mal ...
 

DaCrazyJavaExpert

Bekanntes Mitglied
Oha EDIT: Es funktioniert wieder alles, bis auf das Updaten der Daten, dass heißt ich bin am gleichen Punkt wie zuvor, nur mit einem anderen "Code-Layout" Das freut mich tatsächlich. Also den Fehler muss ich noch finden
 

DaCrazyJavaExpert

Bekanntes Mitglied
Die save()-Methode wird im Listener aufgerufen, nachdem du mit database.setAnzahlCookies und database.set... aufgreufen hast.
Im Konstruktor von Database brauchst du natürlich nicht gleich nach dem Laden wieder save aufzurufen, das bringt nichts. Und eine Instanz von Database legst du im Konstruktor deiner GUI an. Das hattest du doch schon mal ...
Aha, also so?
Java:
    @Override
            public void mousePressed(MouseEvent e) {
                anzahlCookies += database.getCookies_Pro_Klick();
                lblAnzahlCookies.setText("Cookies: " + anzahlCookies);
                lblCookie.setVisible(false);
                lblCookieClicked.setVisible(true);
                database.setAnzahl_Cookies(anzahlCookies);
                database.setCookies_Pro_Klick(database.getCookies_Pro_Klick());
                database.save(); /hier save()
            }
Ich doch angelegt!?:
Java:
    public CookieClickerGUI() {
        Database database = new Database();
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setLocationByPlatform(true);
        this.setSize(FRAME_WIGHT, FRAME_HIGH);
        this.initialComponents();
        this.addComponetsToPanelOverlay();
        this.registerCookieListener();
    }
 

JStein52

Top Contributor
database.setCookies_Pro_Klick(database.getCookies_Pro_Klick()); das musst du natürlich nicht machen wenn sich dieser Wert nicht ändert.
Database database ... das darf nicht lokal im Konstruktor deklariert werden sondern muss hoch in die Klasse. Das new bleibt im Konstruktor.

Edit: sonst sieht es jetzt langsam richtig aus ...
 

DaCrazyJavaExpert

Bekanntes Mitglied
JA,
database.setCookies_Pro_Klick(database.getCookies_Pro_Klick()); das musst du natürlich nicht machen wenn sich dieser Wert nicht ändert.
später wird es ein Shopsystem geben(jedenfalls so mein Plan). Wenn man was "einkäuft" werden die cookiesProClicks geändert. Und ja ich weiß, man sollte eigentlich mit der Datenspeicherung erst beginnen, wenn man den Rest des Programms hat. Werd ich bei den folgenden Prgrammen auch so einhalten :).
Database database ... das darf nicht lokal im Konstruktor deklariert werden sondern muss hoch in die Klasse. Das new bleibt im Konstruktor.
Aso.
 

JStein52

Top Contributor
anzahlCookies += database.getCookies_Pro_Klick();
das ist noch falsch. anzahlCookies sollte er gar nicht kennen. Und du wolltest das doch um 1 inkrementieren oder ?

Code:
int anzahlCookies = database.getCookies_Pro_Klick() + 1;
 

DaCrazyJavaExpert

Bekanntes Mitglied
So isses richtig oder? :
Java:
Database database;

    public CookieClickerGUI() {
        database = new Database(); // Hier
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setLocationByPlatform(true);
        this.setSize(FRAME_WIGHT, FRAME_HIGH);
        this.initialComponents();
        this.addComponetsToPanelOverlay();
        this.registerCookieListener();
    }
Ist es eigentlich relevant, wo ich new Database() im Konstruktor aufrufe?
 

DaCrazyJavaExpert

Bekanntes Mitglied
anzahlCookies += database.getCookies_Pro_Klick();
das ist noch falsch. anzahlCookies sollte er gar nicht kennen. Und du wolltest das doch um 1 inkrementieren oder ?

Code:
int anzahlCookies = database.getCookies_Pro_Klick() + 1;
Ähm anzahlCookies kennt er daher:
Java:
    // Variables
    private int cookiesProClick; //Das hier ist mittlerweile useless geworden
    private long anzahlCookies;
Und 1 ist es schon, da...:
Java:
private final  String ADD_INSTRUCTIONS = "INSERT INTO COOKIE_VALUES VALUES (DEFAULT, ?, ?)"; // Datensätzte
private final  String UPDATE_VALUES = "UPDATE COOKIE_VALUES SET COOKIES_PRO_KLICK= ?, ANZAHL_COOKIES= ?";

if (!tables.next()) { // Nur erstellen wenn Datenbank noch nicht vorhanden ist
                Statement instructions = connection.createStatement();
                instructions.executeUpdate(CREATE_DATA_TABLE);
                PreparedStatement insertStatement = connection.prepareStatement(ADD_INSTRUCTIONS);
                insertStatement.setInt(1, 1); // hier wirds auf 1 gesetzt. Und zwar nur beim ersten Programmstart, danach wird immer der wer genommen, der hinter cookies_Pro_Klick steckt.
                insertStatement.setLong(2, anzahl_Cookies);
                insertStatement.executeUpdate();
 

DaCrazyJavaExpert

Bekanntes Mitglied
Ich glaube, ich muss nur noch anzahl_Cookies aus der Klasse Database anzahlCookies aus der GUI Klasse zuweisen.
EDIT: Oh das tu ich ja schon hiermit:
Java:
database.setAnzahl_Cookies(anzahlCookies);
Ok, irgenwo liegt immernoch ein Problem, denn die Daten werden nicht abgerufen.
 

DaCrazyJavaExpert

Bekanntes Mitglied
Oh mein Gott. Endlich! Ich hab die Lösung aller Lösungen. Es funktioniert. Danke für die ganze Hilfe (Funfact: ... die ganze Hilfe, die sich über 9 Tabs zog). Ich bin euch so dankbar!
 

DaCrazyJavaExpert

Bekanntes Mitglied
Ok danke nochmal vielmals! Und wie versprochen, war das hier der vorerst letzte Thread zum Thema Datenbanken meinerseits. :) Ok ich könnte mich 10 Stunden lang bei euch bedanken, deshalb jetzt einfach: Ciao bis zum nächsten mal :p.

PS: Danke!
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Cast-Fehler: Spring Data exists.... boolean??? Datenbankprogrammierung 1
T compiler fehler: should be mapped with insert="false" update="false" Datenbankprogrammierung 1
O Create Table per JDBC Fehler: ORA-00922 Datenbankprogrammierung 4
H Fehler bei getConnection zu MySQL Datenbank Datenbankprogrammierung 18
S MySQL Hibernate: Fehler bei Verwendung von 2 unterschiedlichen Enumration Datenbankprogrammierung 3
S @OneToMany @JoinTable failed to lazily initialize a collection Fehler Datenbankprogrammierung 2
C Oracle Fehler beim list.add() Datenbankprogrammierung 5
das_leon MySQL Fehler bei der Zeitzone Datenbankprogrammierung 7
M SQL-Statement SQL mit Java, Update Fehler Datenbankprogrammierung 1
L MySQL Bekomme einen Fehler beim ResultSet Datenbankprogrammierung 12
L SQL Fehler (Table/View does not exist) Datenbankprogrammierung 17
P MySQL JPA / MySQL - Fehler bei type=innoDB Datenbankprogrammierung 8
Thallius MySQL Wo ist der Fehler in dem Query? Datenbankprogrammierung 2
B JPA->fehler beim Insert in die Datenbank Datenbankprogrammierung 3
V Fehler beim Generierung Fehler beim Generierung java.lang.ArrayIndexOutOfBoundsException: 0 Datenbankprogrammierung 12
M MySQL-Syntax-Fehler Datenbankprogrammierung 1
H HSQLDB Beim öffnen folgender Fehler: ... java.lang.NullPointerException Datenbankprogrammierung 1
Z Finde den Fehler: Daten aus einer Access-Datenbank lesen Datenbankprogrammierung 12
W Jackcess Fehler Datenbankprogrammierung 1
I Fehler bei Ausgabe der Daten aus der DB Datenbankprogrammierung 3
J SQL-Statement Meine insert befehle funktionieren nicht und ich weiß nicht wo der fehler liegt Datenbankprogrammierung 5
serjoscha MySQL Eine Instanz von eigenem DBWrapper -> Fehler durch mehrfachbenutzung möglich? Datenbankprogrammierung 2
M Wo ist mein Fehler ? o: Datenbankprogrammierung 4
C H2 Syntax fehler beim erstellen einer Tabelle Datenbankprogrammierung 4
T JDBC Fehler Datenbankprogrammierung 2
Neumi5694 Java + MS Access + 64 Bit = Fehler -1073740777 Datenbankprogrammierung 2
T Fehler beim ausgeben von Tabellen Inhalt Datenbankprogrammierung 9
R Fehler 2601 trotz SQL-UPDATE ? Datenbankprogrammierung 2
G JDBC Connection Fehler Datenbankprogrammierung 8
J Fehler bei mySQL Query Datenbankprogrammierung 19
D Oracle PLSQL Block Fehler Datenbankprogrammierung 11
P SQL-Statement Bei meinem Statement ist ein Fehler? Datenbankprogrammierung 2
S Fehler mit JdbcRowSet Datenbankprogrammierung 2
A Oracle Unbekannter Fehler bei insert Befehl Datenbankprogrammierung 3
B MySQL Fehler: Cannot open connection mit Tomcat7, Hibernate und MySQL Datenbankprogrammierung 4
M PL/SQL Fehler "Kein Wert zurückgegeben" Datenbankprogrammierung 4
S 2 Tabellen zu einer zusammenführen, INSERT INTO Fehler Datenbankprogrammierung 5
Crashbreaker MySQL MySQL - Hibernate gibt Fehler aus Datenbankprogrammierung 25
M Access Update Statement Fehler update -> unmöglich? Datenbankprogrammierung 3
I Derby/JavaDB Update Fehler Datenbankprogrammierung 4
N Update Prepared Statement Fehler bei Argumenten Datenbankprogrammierung 3
D JDBC Fehler beim laden der nativen Bibliothek db2jcct2 Datenbankprogrammierung 9
N Oracle Fehler Ungültiges Zeichen Datenbankprogrammierung 2
jgh Zeichensatz-Fehler Datenbankprogrammierung 10
L Derby/JavaDB Fehler beim Erstellen einer Tabelle Datenbankprogrammierung 2
F hsqldb Fehler - unknown source Datenbankprogrammierung 11
E Fehler- Komme nicht auf Datenbank Datenbankprogrammierung 13
trash ResultSet Syntax Fehler Datenbankprogrammierung 11
trash JDBC Einbinden Fehler Datenbankprogrammierung 9
B Fehler in Stored Procedure Datenbankprogrammierung 7
E [ACCESS ODBC] INSERT INTO Fehler Datenbankprogrammierung 4
E Nach Server wechsel Datenbank fehler ?!? Datenbankprogrammierung 3
H Fehler bei null-Datum in MySQL-DB Datenbankprogrammierung 2
B SQL - Ich kann die Fehler nicht finden Datenbankprogrammierung 3
K DB2 Insert mit Subselect Fehler Datenbankprogrammierung 2
M Update mysql Fehler ?? Datenbankprogrammierung 4
T Fehler im SQL ... Datenbankprogrammierung 8
J Fehler bei Hibernate Configuration Datenbankprogrammierung 9
N group by fehler Datenbankprogrammierung 4
P SQL Fehler helft mir bitte Datenbankprogrammierung 12
F Fehler bei Stored Function Datenbankprogrammierung 2
S Fehler beim Auslesen von Daten Datenbankprogrammierung 6
C Wo ist der Fehler? Datenbankprogrammierung 5
H Fehler mit ". Microsoft Access Driver" Datenbankprogrammierung 12
K Fehler bei Rückgabewerten Datenbankprogrammierung 3
M Statemend Fehler Datenbankprogrammierung 11
H Beim insert bekomme ich den Fehler missing select keyword Datenbankprogrammierung 2
E Seltsamer Fehler Datenbankprogrammierung 10
T Fehler bei Verbindungsaufbau zu MySql DB Datenbankprogrammierung 4
S Fehler bei DB Verbindung Access Datenbankprogrammierung 6
A JDBC-Fehler "Objekt bereits geschlossen" Datenbankprogrammierung 4
O SQL-Query bringt Fehler Datenbankprogrammierung 4
B MySql DELETE Anweisung gibt Fehler zurück Datenbankprogrammierung 7
A Fehler beim Starten des Servers für H2 Database Datenbankprogrammierung 13
A Fehler in der HSQLDB Datenbankprogrammierung 6
B fehler bei select befehl Datenbankprogrammierung 5
G SQL fehler -> woran liegt das? Datenbankprogrammierung 3
M Odbc und Fehler Datenbankprogrammierung 44
M Fehler bei der Verbindung zu einer MSSQL/Express Datenbank! Datenbankprogrammierung 17
D mySQL emullierte PreparedStatements haben Fehler unter Last Datenbankprogrammierung 3
F Fehler in Suns FilteredRowSet Implementierung? Datenbankprogrammierung 11
R Fehler in der Eingabe? Datenbankprogrammierung 3
J Fehler bei Oracle-Datenbankverbindung Datenbankprogrammierung 2
E JDBC Oracle Fehler, zugriff auf datenbank (Cluster) Datenbankprogrammierung 5
P Fehler: result-set zeigt auf null, aber warum Datenbankprogrammierung 4
G Fehler in der select-Abfrage Datenbankprogrammierung 3
G Fehler beim Verbinden Datenbankprogrammierung 4
D Primary-Key -> Fehler: "Unique constraint violation& Datenbankprogrammierung 12
E Fehler in der SQL-Anweisung Datenbankprogrammierung 11
A Fehler in der Datenbankklasse Datenbankprogrammierung 14
M insert befehl funzt nicht!wo ist der fehler? Datenbankprogrammierung 5
N Fehler beim matchen von Strings via Query Datenbankprogrammierung 2
L komischer Fehler von ResultSet. Datenbankprogrammierung 2
R Fehler in Datenbankanbindung Servlet -> Access Datenbankprogrammierung 5
E Fehler bei String-Insert in MySQL-DB Datenbankprogrammierung 8
G Wo ist hier der Fehler (createStatement) Datenbankprogrammierung 2
M executeBatch() - Inserts trotz Fehler weitermachen Datenbankprogrammierung 5
W Fehler bei Insert Anweisung obwohl getestet Datenbankprogrammierung 3
J Fehler beim PreparedStatement Datenbankprogrammierung 2
H Java/Access - Fehler bei der Parameterübergbe Datenbankprogrammierung 4

Ähnliche Java Themen

Neue Themen


Oben