datenbankzugriff werte addieren

Status
Nicht offen für weitere Antworten.

spliffi

Mitglied
ich hab mal wieder in problem mit meinem haushaltsbuch...

meine zugriffe auf die datenbank mache ich mit einer eigenen klasse der "DBkasse"

hier mal der code davon:

Code:
package util;
import java.sql.*;
import java.util.*;
public class DBkasse {
    private static DBkasse tool;
    private String driver ="org.gjt.mm.mysql.Driver";
    private String verbindung ="jdbc:mysql://localhost:3306/haushaltsbuch";
    private String user="root";
    private String password="password";
    private String lol="";
    private Connection con;
    private Vector vHeader = new Vector();
    private PreparedStatement psInsert ;
    private PreparedStatement psDelete ;
    private PreparedStatement psAdd ;
    
    private DBkasse() {
        this("org.gjt.mm.mysql.Driver", "jdbc:mysql://localhost:3306/haushaltsbuch", "root","password");
    }
    private DBkasse(String driver, String verbindung, String user, String password) {
        this.driver = driver;
        this.verbindung=verbindung;
        this.user=user;
        this.password=password;
        
        try {
            Class.forName(driver);
            con = DriverManager.getConnection(verbindung,user,password);
            psInsert = con.prepareStatement("INSERT INTO kassenbuch(datum,art_der_ausgaben,wert) values(?,?,?)");
            
        } catch (Exception e) {
            System.out.println("Problem in DBTool Konstuktor" + e);
            System.exit(0);
        }
        
        try {
            Class.forName(driver);
            con = DriverManager.getConnection(verbindung,user,password);
            psDelete = con.prepareStatement("DELETE FROM kassenbuch WHERE datum=?");
            
        } catch (Exception e) {
            System.out.println("Problem in DBTool Konstuktor " + e);
            System.exit(0);
        }
        
        try {
            Class.forName(driver);
            con = DriverManager.getConnection(verbindung,user,password);
            psAdd = con.prepareStatement("select sum(wert) from kassenbuch");
            psAdd.execute();
            
        } catch (Exception e) {
            System.out.println("Problem in DBTool Konstuktor" + e);
            System.exit(0);
        }
        
     
    }
    

    public static DBkasse getInstance() {
        // wenn das Objekt noch nicht erzeugt wurde
        if (tool == null) {
            tool = new DBkasse();
        }
        return tool ;
    }
    
    
    
    // gibt einen doppelten Vector zurueck, der den Inhalt der Tabelle haushaltsbuch.kassenbuch enthaelt

    public Vector getHeader() {
        if (vHeader.size() ==  0){
            getAllRecords();
        }
        return vHeader;
    }
    public Vector getAllRecords() {
        Vector megaVector = new Vector();
        try {
            Statement stmt = con.createStatement();
            
            ResultSet rs = stmt.executeQuery("SELECT * FROM kassenbuch");
            ResultSetMetaData rsmd = rs.getMetaData();
            
            int count = rsmd.getColumnCount();
            vHeader.clear();
            for (int i = 1; i<= count;i++) {
                
                vHeader.add(rsmd.getColumnLabel(i));
            }
            // Schleife die Satz für Satz durch RS läuft
            while (rs.next()) {
                Vector satzVector =new Vector();
                // Spaltenschleife
                for (int i = 1; i<= count;i++) {
                    satzVector.add(rs.getString(i));
                }
                megaVector.add(satzVector);
                
            }
            
            
        } catch (SQLException se ) {
            System.out.println("Problem in getAllRecords() " +se);
        }
        return megaVector;
    }
    
    public Vector getSumme() {
        Vector sumVector = new Vector();
        try {
            Statement stmt = con.createStatement();
            
            ResultSet rs = stmt.executeQuery("select sum(wert) from kassenbuch");
            ResultSetMetaData rsmd = rs.getMetaData();
            
            int count = rsmd.getColumnCount();
            
            for (int i = 1; i<= count;i++) {
                
                vHeader.add(rsmd.getColumnLabel(i));
            }
            // Schleife die Satz für Satz durch RS läuft
            while (rs.next()) {
                Vector sumsatzVector =new Vector();
                // Spaltenschleife
                for (int i = 1; i<= count;i++) {
                    sumsatzVector.add(rs.getString(i));
                }
                sumVector.add(sumsatzVector);
                
            }
            
            
        } catch (SQLException se ) {
            System.out.println("Problem in getsumme() " +se);
        }
        return sumVector;
    }
    

    
    public void einfuegen(String dt, String ada, String num) throws SQLException {
        try {
            // fuellt die Spalten des PreparedStatments
            psInsert.setString(1, dt);
            psInsert.setString(2, ada);
            psInsert.setString(3, num);
            psInsert.executeUpdate();
        } catch (SQLException se ) {
            System.out.println("vonne DB_Class Probleme in einfuegen... ");
            throw se;
        }
    }
    
    public void loeschen(String datum)throws SQLException {
        try {
            // fuellt die Spalten des PreparedStatments
            psDelete.setString(1, datum);
            psDelete.execute();
        } catch (SQLException se ) {
            System.out.println("vonne DB_Class Probleme in löschen... ");
            throw se;
        }
    }
    

}



so, das oben gezeigte funktioniert auch schon so, wie es soll und ich kann von den servlets auch darauf zugreifen.
die nächste aktion wäre dann das ausrechnen von den einzelnen eingetragenen ausgaben innerhalb eines bestimmten zeitraums.

der mysql-befehl wäre hier:

Code:
 select sum(wert)
where datum between '2007-05-01' and '2007-05-15'

und um die entsprechenden einträge anzuzeigen wäre es:

Code:
 select * from kassenbuch
where datum between '2007-05-01' and '2007-05-15'


wobei das datum, bzw die beiden datumswerte variabel sein sollen und über ein form-tag übergeben wird.
sobald ich ein prepared statement in der gleichen weise schreibe und auch eine entsprechende funktion
(ähnlich einfuegen() oder loeschen() ) wie beim input oder delete, crashed das ganze und nix geht mehr.

wie kann ich das ganze realisieren??
 

spliffi

Mitglied
kann mir zu dem problem niemand einen denkanstoss geben?? ich will ja nicht, daß mir der quellcode vorgekaut wird, dennoch finde ich keine lösung zu meinem problem.
wäre echt prima, wenn sich mir jemand erbarmen könnte

ich hatte auch schon die getSumme()-funktion mit der where-klausel erweitert, dennoch blieb das erfolglos.
oder sollte ich diese funktion gar nicht in die DBkasse einbinden, sondern über das "bilanz-servlet" ??

wenn ich das posting hier an der falschen stelle habe oder irgendwas mißahtet haben sollte, gebt mir bitte bescheid, denn meine suche im netz blieb bisher erfolglos.
 

spliffi

Mitglied
die Exception ist eine java.sql.SQLException, manchmal auch ne andere... NullPointerException glaube ich.
oder was auch ganz oft kam war: Problem in DBTool Konstuktor java.sql.SQLException: No value specified for parameter 1- und das obwohl doch die werte nicht direkt beim starten sondern erst beim submit der form durchgegeben werden sollten.

den genauen code hab ich schon gelöscht, weil ich einfach zu verzweifelt bis enttäuscht war, daß des auf einmal alles nicht mehr fruchtet.

das prepared statement sah so aus:
Code:
    try {
            Class.forName(driver);
            con = DriverManager.getConnection(verbindung,user,password);
            psZwischenbilanz = con.prepareStatement("select sum(wert) from kassenbuch where datum between ? and ?");
            psZwischenbilanz.execute();
            
        } catch (Exception e) {
            System.out.println("Problem in DBTool Konstuktor" + e);
            System.exit(0);
        }


Code:
 public Vector getZwischenSumme() {
        Vector zsumVector = new Vector();
        try {
            Statement stmt = con.createStatement();
            ResultSet rs = stmt.executeQuery("select sum(wert) from kassenbuch where datum between ? and ?");
            ResultSetMetaData rsmd = rs.getMetaData();
            
            int count = rsmd.getColumnCount();
            
            for (int i = 1; i<= count;i++) {
                
                vHeader.add(rsmd.getColumnLabel(i));
            }
           
            while (rs.next()) {
                Vector zsumsatzVector =new Vector();
               
                for (int i = 1; i<= count;i++) {
                    zsumsatzVector.add(rs.getString(i));
                }
                zsumVector.add(zsumsatzVector);
                
            }
            
            
        } catch (SQLException se ) {
            System.out.println("Problem in getZwischensumme() " +se);
        }
        return zsumVector;
    }
so ungefähr war die funktion getZwischenSumme()


dann hatte ich noch eine andere funktion probiert


Code:
public void zwischenbilanz(String datum, String datum2)throws SQLException {
        try {
            // fuellt die Spalten des PreparedStatments
            psZwischenbilanz.setString(1, datum);
            psZwischenbilanz.setString(2, datum2);
            psZwischenbilanz.execute();
        } catch (SQLException se ) {
            System.out.println("vonne DB_Class Probleme in zwischenbilanz... ");
            throw se;
        }
    
    }

aber wie gesagt, genau bekomm ich den code nicht mehr hin.
die funktion sollte doch eigentlich so sein, wie die getSumme() oder nicht? nur das man das statement um die where-klausel erweitert...
 

kleiner_held

Top Contributor
Code:
psZwischenbilanz = con.prepareStatement("select sum(wert) from kassenbuch where datum between ? and ?");
psZwischenbilanz.execute();
In der ersten Zeile baust du das PreparedStatement und in der zweiten Zeile fuehrst Du es schon aus! Da in dem Moment die Parameter noch nicht gesetzt sind, knallt es natuerlich.

Den gleichen Fehler machst du auf Zeile 51 in deinem ersten Post, du fuehrst das PreparedStatement direkt nach dem Erzeugen aus. An der Stelle gibt es nur keinen Fehler, da dieses Statement keine Parameter enthaelt.
 
G

Guest

Gast
Jo genau das was kleiner_held schreibt. Entweder du baust dir nen "normalen" SQL-String, wo die Werte schon drin stehen (kann halt nur einmal verwendet werden), oder wenn du (wie bei dir) ein PreparedStatement nehmen willst musst du das auch vor dem Absetzen noch mit Werten versuchen (die beiden Fragezeichen müssen noch mit Werten gesetzt werden).
 

spliffi

Mitglied
zuerst mal danke, denn die meldung daß mir parameter fehlen kommt nicht mehr!

hab zum testen mal eine main-funktion in die DBkasse eingebaut und die funktion getZwischensumme()
so umgeschrieben, daß ich in ihr die beiden datumswerte übergebe getZwischenSumme(String datum, String datum2), nur kommt da jetzt immer die fehlermeldung:

Problem in getZwischensumme() java.sql.SQLException: Syntax error or access violation, message from server: "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '? and ?' at line 1"
also in der datenbank klappt das ausrechnen mit dieser anweisung.



könntest du/ könntet ihr mir evtl doch mit nem stückchen code auf die sprünge helfen, denn ich bekomm des mit meiner datenbankanweisung
Code:
select sum(wert) from kassenbuch where datum between ? and ?
scheinbar doch nicht hin. dachte immer die '?' wären die Platzhalter für die variablen parameter, die später eingefügt werden.
aber ich sitze jetzt schon 2 tage wie ein ochse vorm berg an dieser sache fest. der rest funktioniert wunderbar.

danke für die zeit und mühe, die in mich investiert wurde und evtl noch wird.
 

kleiner_held

Top Contributor
Bau doch mal kurze Testklasse, die nichts enthaelt ausser DB-Verbindungsaufbau, Erzeugung des prepared Statements, fuellen des prepared Statements mit parametern und ausgeben des ResultSets - auf Basis von sowas lasst sich eine Fehlerursache wesentlich besser nachvollziehen, vor allem fuer Aussenstehende.
 

spliffi

Mitglied
ich hab jetzt mal den kompletten projektordner und nochmal separat die DBkasse, sowie datenbanktreiber in ein rar-paket gepackt...

findet man hier: haushaltsbuch_und_datenbankzugriff.rar

mein problem ist, daß ich die ganze funktion für die select-anweisung nicht auf die kette bekomme...
in der DBkasse hab ich zum testen ne main-funktion geschrieben, die im system.out die werte anzeigen sollte..
das bilanz-servlet kann man noch außer acht lassen, denn da hab ich noch nix funktionsfähiges (würd ja auch erst auf die fehlende funktion aufgebaut.)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Datenbankzugriff - Leere Zeile einfügen Java Basics - Anfänger-Themen 2
M Datenbankzugriff Java Basics - Anfänger-Themen 6
M Java-Projekt in JAR umwandeln und Datenbankzugriff Java Basics - Anfänger-Themen 10
A Datenbankzugriff ohne Eclipse Java Basics - Anfänger-Themen 15
G Jar Datei inkl. Datenbankzugriff Java Basics - Anfänger-Themen 9
M Datenbankzugriff via JDBC Java Basics - Anfänger-Themen 8
G Datenbankzugriff Java Basics - Anfänger-Themen 5
M Verständnisfrage zu 'localhost' beim datenbankzugriff Java Basics - Anfänger-Themen 5
M SQL-Anweisung bei Datenbankzugriff Java Basics - Anfänger-Themen 7
D Datenbankzugriff mit einem Applet Java Basics - Anfänger-Themen 14
P Datenbankzugriff Java Basics - Anfänger-Themen 21
K Mehrere Werte in einem Switch Case parallel überprüfen Java Basics - Anfänger-Themen 23
F 2x 16bit Werte zu einem 32bit und dann splitten mit 0xb Java Basics - Anfänger-Themen 1
ptcho Werte/Position nach dem Funktionsaufruf tauschen? Java Basics - Anfänger-Themen 1
K Warum sind Werte in den Feldern ? Java Basics - Anfänger-Themen 2
S Bestimmte werte aus einem Array löschen Java Basics - Anfänger-Themen 2
javaBoon86 Arrays 2 Dimension Werte ausgeben Java Basics - Anfänger-Themen 15
E Reihenfolge der Werte umdrehen (mittels statischem int-Array Java Basics - Anfänger-Themen 3
N Einzelne Werte aus einem TreeSet auslesen Java Basics - Anfänger-Themen 2
TeacherMrSSimon Schachspiel, Werte in Figur eintragen klappt nicht Java Basics - Anfänger-Themen 23
TheSepp Nur Arrays ausgeben, die Werte zugewiesen haben. Java Basics - Anfänger-Themen 4
T ungeordnete Werte-Paare in einer Liste Java Basics - Anfänger-Themen 7
M Werte in Felder speichern und geordnet ausgeben Java Basics - Anfänger-Themen 8
R Methoden Werte einer ArrayList als Parameter übergeben. Java Basics - Anfänger-Themen 4
A CSv.Datei einlesen und die werte in zweidemosional Int Array speichern Java Basics - Anfänger-Themen 9
Jambolo Methode, welche die 3 letzten Parameter Werte speichert Java Basics - Anfänger-Themen 20
Chris.089 2 Werte im Array tauschen Java Basics - Anfänger-Themen 6
docmas 2DArray Werte werden nur untereinander ausgegeben Java Basics - Anfänger-Themen 1
M Nur int-Werte erlauben Java Basics - Anfänger-Themen 11
F Werte in einer Arraylist Zählen Java Basics - Anfänger-Themen 2
Fats Waller Compiler-Fehler Kann ich einen String und die Summe zweier Char Werte mittels der println Anweisung ausgeben Java Basics - Anfänger-Themen 4
P Doppelte werte in einer Liste zählen Java Basics - Anfänger-Themen 11
M Wie kann eine Methode eine andere Methode um Werte wie z.B. 1 erhöhen? Java Basics - Anfänger-Themen 6
Igig1 Wie lasse ich dir Werte in einem Array zusammenrücken? Java Basics - Anfänger-Themen 4
Igig1 Welche Werte sind als default Werte in einem Array, der als Datentyp eine Klasse hat? Java Basics - Anfänger-Themen 1
J Methoden Positive Werte zählen Java Basics - Anfänger-Themen 3
E Meine JCombobox werte an ohne selectiert zu haben Java Basics - Anfänger-Themen 6
H OOP Werte mit Set verändern Java Basics - Anfänger-Themen 6
W Werte durch Konsole einlesen Java Basics - Anfänger-Themen 10
H Welche Werte bei Objekterzeugung eingeben? Java Basics - Anfänger-Themen 2
M Von einem Menü Methode aus anderer Klasse ausführen, die errechnete Werte in Datei schreibt. Java Basics - Anfänger-Themen 8
sashady ursprüngliche Array-Werte bei erneutem Aufruf? Java Basics - Anfänger-Themen 7
cmn489 Werte beim Funktionsaufruf in ein Feld übertragen(falls dieses leer ist) Java Basics - Anfänger-Themen 1
E In Array Werte einfügen? Java Basics - Anfänger-Themen 5
HighLife Bestimmte Werte aus Array zählen Java Basics - Anfänger-Themen 15
L Methoden ArrayList Werte hinzufügen und löschen Java Basics - Anfänger-Themen 32
J Zufallszahlen generieren und Werte vergleichen Java Basics - Anfänger-Themen 3
M Wie kann ich Werte die in einer While Schleife sind weiter genutzt werden? Java Basics - Anfänger-Themen 7
L Werte von Objekte addieren Java Basics - Anfänger-Themen 14
R Werte und Reihenfolge in 2d Arrays vergleichen Java Basics - Anfänger-Themen 5
I Werte (u.a. Geldbeträge) in Datenbank speichern und Rundungen? Java Basics - Anfänger-Themen 8
eleonori Durchschnitt aller Werte eines Baums berechnen Java Basics - Anfänger-Themen 5
G Array Werte addieren Java Basics - Anfänger-Themen 4
J Methoden Frage: Array-Werte in anderer Methode ändern Java Basics - Anfänger-Themen 4
C Array-Werte werden gemischt, ohne Logik Java Basics - Anfänger-Themen 2
java3690 Java- liste füllen ud die werte addieren Java Basics - Anfänger-Themen 13
C Zufallszahl + Werte bereich einstellen Java Basics - Anfänger-Themen 2
J Alle Werte eines Strings zusammen addieren Java Basics - Anfänger-Themen 15
L 2 Dimensional Array werte überschreiben Java Basics - Anfänger-Themen 1
K Array alle Werte aufsummieren und ausgeben Java Basics - Anfänger-Themen 6
V Collections int Werte in einer Liste sortieren Java Basics - Anfänger-Themen 23
Rubberduck Combobox-Werte in GUI anzeigen Java Basics - Anfänger-Themen 13
J Neue Werte in ein Array hinzugeben Java Basics - Anfänger-Themen 8
L Wie frage ich ab, ob in einem Array, Werte doppelt vorkommen? Java Basics - Anfänger-Themen 4
A Negative float Werte? Java Basics - Anfänger-Themen 10
Kirby.exe Fehlende Int Werte aus Array mit streams finden Java Basics - Anfänger-Themen 19
Ellachen55 Wie nach häufigste Werte im Array suchen? Java Basics - Anfänger-Themen 2
D Input/Output Input von zwei Koordinaten validieren und anschließend Werte speichern Java Basics - Anfänger-Themen 7
F Variablen Werte einer Klasse überschreiben Java Basics - Anfänger-Themen 4
M Werte ändern sich nicht mehr nach Reset Java Basics - Anfänger-Themen 14
F Character umwandeln als Double Werte Java Basics - Anfänger-Themen 8
B Werte aus einem Unterprogramm in ein Array schreiben Java Basics - Anfänger-Themen 2
L Nur Bestimmte Werte aus einem Array in ein anderes Speichern Java Basics - Anfänger-Themen 11
C Ganzzahlige Werte in Boolean ausgeben und überprüfen ob Primzahl oder nicht, wenn es keine Primzahl ist soll es die Primfaktorzerlegung ausgeben Java Basics - Anfänger-Themen 4
S Werte aufsummieren in java? Java Basics - Anfänger-Themen 5
M Werte des Arrays addieren Java Basics - Anfänger-Themen 5
A Alle true Werte eines boolean Arrays herausfiltern Java Basics - Anfänger-Themen 19
C System.in.read() Boolsche Werte vergleichen Java Basics - Anfänger-Themen 8
M prüfen ob alle array werte gleich sind Java Basics - Anfänger-Themen 27
D Werte aus einem BinärBaum in einem Array speichern Java Basics - Anfänger-Themen 1
R Datenbank-Werte dynamisch ausgeben Java Basics - Anfänger-Themen 19
E Eigenschaften Werte, in einer anderen Klasse, zuweisen Java Basics - Anfänger-Themen 40
H Methoden Nutzung der Werte einer ausgeführten Objektmethode in anderen Objektmethoden Java Basics - Anfänger-Themen 2
O Map Werte Java Basics - Anfänger-Themen 2
dapzoo Compiler-Fehler Beim Werte verteilen in Objektarray NullPointerException Java Basics - Anfänger-Themen 4
L Werte zufällig aus Array zurückgeben Java Basics - Anfänger-Themen 15
B mehrere Werte mit scanner und while schleife einlesen, max berechnen bzw addieren Java Basics - Anfänger-Themen 2
S werte von objekten in schleife verändern Java Basics - Anfänger-Themen 14
R Vererbung werte von einem Objekt aus ein anderes übertragen Java Basics - Anfänger-Themen 7
D Datei auslesen & Werte in Variable speichern Java Basics - Anfänger-Themen 12
N Methoden HashMap interne Werte miteinander vergleichen Java Basics - Anfänger-Themen 7
L Bestimmte Werte eines Arrays ausgeben. Java Basics - Anfänger-Themen 3
Hanschyo String kann nicht Werte von Long annehmen Java Basics - Anfänger-Themen 2
A Sortieren ausgerechneter Werte aus einer TXT Datei Java Basics - Anfänger-Themen 8
S Werte in Klasse übergeben Java Basics - Anfänger-Themen 12
C Auf einzelne Werte aus HashSet zugreifen Java Basics - Anfänger-Themen 10
S Werte in Liste mit Nachfolger vergleichen Java Basics - Anfänger-Themen 5
M Vererbung Konstruktoren mit festen Werte Java Basics - Anfänger-Themen 2
C Werte im Vector in zufällige Reihenfolge bringen Java Basics - Anfänger-Themen 14
Jinnai4 Werte in Textdatei ändern Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben