MySQL SQL Abfrage in JTable mit Berechnung

Merkaber

Mitglied
Hallo Java-Mitstreiter,

seid kurzem habe ich wieder angefangen mir Java im Selbststudium anzueignen. Vorkenntnisse hatte ich schon aus meiner Ausbildung, dennoch habe ich leider eine Menge vergessen.

Ich moechte gleich zur Sache kommen. Ich versuche momentan ein Programm zu entwickeln, was ich auf Serverbasis schon verwirklicht habe. Dieses Problem habe ich also schon mit PHP und HTML geloest und moechte es nun in ein ausfuehrbares Programm "umwandeln".

Es beeinhaltet eine SQL Abfrage mit Berechnung auf Knopfdruck. Eventuell erweiterbar mit uebergabe von einzelnen Parametern (aber das ist erstmal unwichtig).
Angezeigt soll eine Tabelle (JTable in JScrollPane) und der berechnete Wert sein.

Bisheriger Loesungsversuch:
Das ist die "Main Klasse" wobei ich weiss, dass ich das JFrame noch in eine andere Klasse packen sollte bzw. Datei, aber ich habe das erstmal so mit Window-maker gemacht, um zu testen ob das klappt.

Java:
public class StartFrame extends JFrame {

    private JPanel contentPane;
    private JTable table;
    String input = "1500";
    ResultSet qRs;
   
    public static void main(String[] args) {
        String output;
       
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    StartFrame frame = new StartFrame();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    public StartFrame() {
        DBConnection dbConn = new DBConnection();
        final DBQuerys dbQuery = new DBQuerys();
        qRs = dbQuery.Query1(dbConn.conMethode(), input);

        // Berechnung folgt
            int calc = 0;
            int calcNew = 0;
            int calcStart = 0;
           
                try {
                   
                    while(qRs.next()) {
                        calcNew = qRs.getInt("buyerID") + calcStart;
                        calc = calcNew;
                        calcStart = calc;
                    }
                } catch(Exception e) {
                    System.out.println(e);
                }
// Berechnung Ende
       
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 1700, 900);
        setTitle("Accounting Programm");
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);
        contentPane.setLayout(null);
       
        JLabel lblAccountingProgrammVon = new JLabel("Accounting Programm von Merkaber");
        lblAccountingProgrammVon.setBounds(5, 5, 424, 13);
        contentPane.add(lblAccountingProgrammVon);
       
        final JLabel lblCounting = new JLabel();
        lblCounting.setBounds(280, 64, 200, 20);
        contentPane.add(lblCounting);
        final String nWert = String.valueOf(calcStart);
       
        JLabel lblBitteWhlenSie = new JLabel("Bitte W\u00E4hlen Sie, was sie tun m\u00F6chten!");
        lblBitteWhlenSie.setFont(new Font("MS UI Gothic", Font.PLAIN, 20));
        lblBitteWhlenSie.setBounds(650, 28, 350, 30);
        contentPane.add(lblBitteWhlenSie);
       
        final JButton btnQuery = new JButton("Query");
        btnQuery.setBounds(170, 64, 91, 21);
        btnQuery.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                table.setModel(DbUtils.resultSetToTableModel(qRs));
                btnQuery.setEnabled(false);
                lblCounting.setText(nWert);
            }
        });
        contentPane.add(btnQuery);
       
        JScrollPane scrollPane = new JScrollPane();
        scrollPane.setBounds(50, 120, 1585, 500);
        contentPane.add(scrollPane);
       
        table = new JTable();
        table.setModel(new DefaultTableModel(
            new Object[][] {
            },
            new String[] {
            }
        ) {
            boolean[] columnEditables = new boolean[] {
               
            };
            public boolean isCellEditable(int row, int column) {
                return columnEditables[column];
            }
        });
        scrollPane.setViewportView(table);
    }
}

Nun folt der Query:

Java:
public class DBQuerys {
   
    public ResultSet Query1(Connection con, String limit) {
        String error;
        ResultSet rsLiefert = null;

        try {
            Statement stmt = con.createStatement();
            rsLiefert = stmt.executeQuery("SELECT productID, buyerID FROM products");
           
        } catch (Exception e) {
            error = "\nFehler\n" + e;
        }

        return rsLiefert;
    }

}

und die Connection:

Java:
public class DBConnection {
    Connection con = null;
    public Connection conMethode() {
        try {
            con = DriverManager.getConnection("jdbc:mysql://localhost:3306/receipts", "userName", "Password");
        } catch (Exception e) {
            System.out.println(e);
        }
    return con;
    }
   
    public void closing() {
        try {
            con.close();
        } catch (Exception e) {
            System.out.println(e);
        }
    }

}

Unten folgt noch der Code kurz, wie ich das in PHP geloest habe.

Ich habe nun 3 Probleme, auf die ich keine Antwort weiss. Ich habe mir in der Documentation schon einiges durchgelesen, aber ich werde einfach nicht schlau draus. Ich habe mich schon abgefunden, dass ich zu doof bin ein TableModel anzufertigen, deswegen habe ich das hier genommen: http://sourceforge.net/projects/finalangelsanddemons/

1. Problem:
Tabelle wird angezeigt, wenn ich die Berechnung rausnehme. Wenn ich die Berechnung hinzufuege, wird die Tabelle nicht mehr angezeigt.
Loesungsversuch war, dass eventuell das ResultSet geschlossen wird, wird es aber nicht. Kein Plan, nach was ich googeln soll.

2. Problem:
Beim ersten mal druecken das Button, wird die Tabelle ohne Berechnung angezeigt, beim zweiten mal geloescht und dann passiert nichts mehr, darum das disablen des Buttons. Warum passiert das?? Wo uebersehe ich eine Logik in Java?

3. Problem:
Ich habe den Datentyp "Decimal" in MySql verwendet. In Java gibt es den wohl nicht, habe ich etwas uebsehen? Kann ich einfach double anstelle nehmen und gut ist es? Also einfach Result Set.getDouble(...) ?

Ich hoffe ich habe nicht zu viel verlangt. Ich finde einfach keine Loesung zu den Problemen. Ich weiss auch einfach nicht, nach was ich suchen soll. Dazu fehlt mir die Erfahrung in Java.

Liebe Gruesse an alle,
fuer kleine Hinweise waere ich schon dankbar!!

PHP Code:

PHP:
$ausgabe = mysqli_query(
        $db2,
        '...'
    );
    $entity = mysqli_num_rows($ausgabe);

    $ergebnisAnfang_price = "";

    while ($row = mysqli_fetch_object($ausgabe)) {

        $ergebnisNeu_price = $row->price+$ergebnisAnfang_price;
        $ergebnis_price = $ergebnisNeu_price;
        $ergebnisAnfang_price = $ergebnis_price;

        $data[] = array(
            'purchaseID'       => $row->purchaseID,
            'day'               => $row->day,
            'price'               => $row->price,
        );

        $country = $row->country;
    }

PHP:
foreach ($data as $set)
    {
        $data_finish .= sprintf(
        '<tr>'
        . '<td>%1$s</td>'
        . '<td>%2$s</td>'
        . '</tr>',

        htmlspecialchars($set['purchaseID']),
        htmlspecialchars($set['day']),
        );
    }

Einfach nur ein kleines Beispiel wie ich das in PHP gemacht habe. Vielleicht kann mir ja jemand den Unterschied zu Java da erklaeren.
 

Thallius

Top Contributor
Sorry aber so wie es aussieht fehlt dir auch die Erfahrung in mySQL und PHP :) Willst Du nicht erstmal eins richtig lernen bevor due wieder was neues anfängst?

Code:
       $ergebnisNeu_price=$row->price+$ergebnisAnfang_price;
       $ergebnis_price=$ergebnisNeu_price;
       $ergebnisAnfang_price=$ergebnis_price;

Wozu brauchst du die Variablen ergebnisNeu_price und ergebnis_price?

Gleiches Spiel in Java

Code:
calcNew = qRs.getInt("buyerID")+ calcStart;
                        calc = calcNew;
                        calcStart = calc;

und benutzen tust du nur calcstart....

Dir ist schon klar, dass du das was Du da "berechnest" auch mit einem einfachen sql query SUM('price') direkt von der Datenbank geliefert bekommen würdest?

Ansonsten fragst Du im PHP script einen price ab und im Java eine BuyerID. Ka warum das jetzt plötzlich anders heißt wo es doch das gleiche machen soll????
 

Merkaber

Mitglied
Danke fuer die Antwort.

Ich weiss, dass es die Funktion SUM in MySql gibt, dennoch war das nur ein kleiner Auszug auf dem PHP Script. Ich hatte nur die Idee, das mir jemand eventuell den Unterschied zwischen PHP-Logik und Java-Logik klarmachen koennte. Die Berechnung benoetigt naemlich zwei Werte, aus einem Datensatz, die dann multipliziert werden, dadurch funktioniert SUM nicht mehr.

Bei diesem Berechnungsvorgang habe ich mir irgendwas bei gedacht, aufjedenfall funktioniert das so im PHP-Script. Irgendwas war da mit der Schleife, dass ich es so schreiben musste das das Ergebnis nicht wieder ueberschrieben wird.

Die Namen sind unterschiedlich, weil das nur ein Auszug ist und nur die herangehensweise zeigen sollte.

Aber vielen Dank fuers Aufmerksam machen, ich gucke mir das nochmal an!
 

Merkaber

Mitglied
Hallo liebe Leute,
nach langem Suchen im Netz usw. ist mir irgendwann die Idee gekommen, dass man eine ResultSet nur einmal aufrufen kann bzw. benutzen kann.
Deswegen muss ich die Methode einfach einzelnd aufrufen und kann nicht einfach eine Variable mit dem ResultSet deklarieren.
Und genau deswegen verschwindet auch die Tabelle, wenn ich Berechne oder nochmals den Button drücke.

Ich hoffe das ist verständlich,
liebe Grüße
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Wie kann ich eine Jtable mit Inhalt einer SQL Abfrage füllen Datenbankprogrammierung 14
M SQL Abfrage in jTable einfügen Datenbankprogrammierung 8
J SQLite Abfrage fehlerhaft - komme nicht weiter - please help. Datenbankprogrammierung 3
L PostgreSQL Abfrage mit EclipseLink Datenbankprogrammierung 7
S Berechnung des Datumsunterschieds in der SQL-Abfrage Datenbankprogrammierung 1
Zrebna Probleme bei Überführung von SQL-Code in eine HQL-Abfrage Datenbankprogrammierung 3
btwX28 mysql abfrage über phpmyadmin Datenbankprogrammierung 8
M Alle Records Felder kriegen für DB Abfrage Datenbankprogrammierung 14
pkm PostgreSQL Kann mit mybatis einen Parameter für eine postgreSQL-Abfrage nicht übergeben. Datenbankprogrammierung 5
nonickatall MySQL SQL Abfrage erneut ausführen oder rs aktualisieren Datenbankprogrammierung 14
Kirby.exe Verständnisproblem bei SQL Abfrage Datenbankprogrammierung 27
N SQL-Abfrage in JTextField ausgeben Datenbankprogrammierung 6
N java sql abfrage bestimmer Datumszeitraum Datenbankprogrammierung 9
F Mapping einer SQL Abfrage in eine Klasse Datenbankprogrammierung 4
N Java Abfrage über GUI, Daten hinzufügen Datenbankprogrammierung 54
Bluedaishi Datenbank Abfrage Datenbankprogrammierung 36
W MySQL DB Abfrage in Array, gemischte Array, generelles vorgehen Datenbankprogrammierung 4
D SQL Abfrage optimieren Datenbankprogrammierung 35
D MySQL Abfrage Datenbankprogrammierung 5
D MySQL Abfrage sortieren Datenbankprogrammierung 4
D MySQL Abfrage SUM datediff Datenbankprogrammierung 3
D Regelmäßige Abfrage aus Workbench Datenbankprogrammierung 6
M SQL-Statement Hilfe bei SQL-Abfrage Datenbankprogrammierung 2
D Abfrage - Spalte(Datum) ändern (Oracle) Datenbankprogrammierung 7
D Datenbank Abfrage Datenbankprogrammierung 7
H MySQL Benutzer Login System mit Datenbank Informationen (Abfrage zu User ist auf DB gesichert) Datenbankprogrammierung 42
D MySQL Abfrage mit kumulierten Werten Datenbankprogrammierung 16
M MySQL Anbindung und Abfrage an die Datenbank Datenbankprogrammierung 2
RowdyN SQLite Einfache Abfrage mit temporäre Tabelle, die nur innerhalb der Abfrage gültig ist Datenbankprogrammierung 0
E Abfrage auf HSQLDB Datenbankprogrammierung 4
S Abfrage von Gruppentickets(Mehrere Resorts an einem Tag) Datenbankprogrammierung 1
S SQL Abfrage Datenbankprogrammierung 2
F Abfrage der letzten Einträge Datenbankprogrammierung 2
J SELECT Abfrage/Suche Datenbankprogrammierung 4
U SQLite Für mich etwa komplexe Abfrage via 2 Tabellen Datenbankprogrammierung 5
OnDemand SQL Abfrage und Equals Datenbankprogrammierung 4
B MySQL MySQL-Abfrage von aufsummierter Zeit Datenbankprogrammierung 3
M MySQL MySQLSyntaxError in Java, obwohl Abfrage in HeidiSQL korrekt Datenbankprogrammierung 2
ruutaiokwu sql abfrage mit rekursion, mit oder ohne cte... Datenbankprogrammierung 5
J SQLite Abfrage ausführen stoppt für Zyklus? Wie es zu lösen? Datenbankprogrammierung 3
L JSONArray/JSONObject MySQL-Servlet Abfrage Datenbankprogrammierung 2
H Derby: SYSCS_UTIL.SYSCS_EXPORT_QUERY mit String Abfrage in wehre-Klausel nicht möglich Datenbankprogrammierung 3
L SQL-Abfrage bricht vor dem Ende ab Datenbankprogrammierung 2
S MySQL Abfrage über mehrere Tabellen + Einträge werden überschrieben Datenbankprogrammierung 1
M Derby/JavaDB Komplexe Abfrage vereinfachen Datenbankprogrammierung 2
S SQL-Abfrage, Filewriter .txt Datei Datenbankprogrammierung 2
P Datenbank- Abfrage mit null'en Datenbankprogrammierung 2
Bluedaishi MySQL Abfrage Problem :-) Datenbankprogrammierung 21
D MySQL Erstellen der richtigen Abfrage Datenbankprogrammierung 3
D MySQL DB Abfrage Prüfen Datenbankprogrammierung 10
D JDBC insert mit select abfrage Datenbankprogrammierung 5
E PostgreSQL Exception too ...many clients already bei DB-Abfrage Datenbankprogrammierung 14
M MySQL SQL Abfrage Problem Datenbankprogrammierung 6
W No data found: SQL-Abfrage funktioniert nur beim Debuggen Datenbankprogrammierung 3
E Abfrage nach existierender SQL-Tabelle Datenbankprogrammierung 7
H JSON Array abfrage beschleunigen Datenbankprogrammierung 2
S MySQL Abfrage: Wenn Feld leer, alles anzeigen Datenbankprogrammierung 5
Mrtwomoon Abfrage-Ergebnisse in einem Fenster darstellen Datenbankprogrammierung 8
0 SQL Abfrage Bestellung Datenbankprogrammierung 15
G SQLite SQLite Abfrage Datenbankprogrammierung 4
C Mit jsp über Java eine DB Abfrage durchführen --> java.lang.ClassNotFoundException Datenbankprogrammierung 4
Dit_ Hibernate, effiziente SQL-Abfrage definieren Datenbankprogrammierung 5
B My-SQL Abfrage - Out Of Memory Error Datenbankprogrammierung 13
C MySQL Problem mit UPDATE Abfrage Datenbankprogrammierung 13
K SQLite Einfache DB-Abfrage Datenbankprogrammierung 2
C Problem mit SQL-Abfrage Datenbankprogrammierung 5
C Sortierung bei SQL-Abfrage Datenbankprogrammierung 3
B Bei Abfrage schießt der Speicher in die Höhe Datenbankprogrammierung 6
M SQL Abfrage Dupliakte bei Kreuzvergleich Datenbankprogrammierung 2
M Access Abfrage mit Parameter & Access/Java liefern unterschiedliche Ergebnisse Datenbankprogrammierung 2
G SQL Abfrage Datenbankprogrammierung 5
C SQL-Abfrage Datenbankprogrammierung 4
B SQL-Abfrage Datenbankprogrammierung 4
R SQL Abfrage, je nach ausgewählten Parametern Datenbankprogrammierung 11
C Wert in SQL-Abfrage zählen lassen Datenbankprogrammierung 8
R Memory leaks bei DB Abfrage Datenbankprogrammierung 16
S Abfrage auf SQLite-DB Datenbankprogrammierung 2
I Belastet es das System zu sehr einen Timer jede 0.2 Sekunden eine DB Abfrage machen zu lassen? Datenbankprogrammierung 9
L MySQL Probleme mit PreparedStatement für SQL-Abfrage in Java Datenbankprogrammierung 2
G Abfrage von Teilnehmern Datenbankprogrammierung 4
B HSQLDB Probleme mit Select...Where Abfrage Datenbankprogrammierung 16
G JOIN Abfrage über mehrere Tabellen Datenbankprogrammierung 15
F MySQL SQL Abfrage für u.a. Spaltenname key Datenbankprogrammierung 4
G SQLite Abfrage, ob in Tabelle X Spalte Y existiert Datenbankprogrammierung 4
A MySQL Ergebnss aus SQL Abfrage in Hauptklasse verwenden Datenbankprogrammierung 3
N Geschwindigkeit bei if Abfrage Datenbankprogrammierung 11
J sql abfrage ... Problem mit Datumswert Datenbankprogrammierung 3
G Performante SQL- Abfrage (LIKE %) Datenbankprogrammierung 21
G Join Abfrage Datenbankprogrammierung 12
M db abfrage fehlerhaft Datenbankprogrammierung 5
C MySQL Abfrage mit flexibler WHERE bedingung Datenbankprogrammierung 10
C Datenbank-Abfrage, if im Select Datenbankprogrammierung 9
S MySQL Frage zu LeftJoin Abfrage Datenbankprogrammierung 2
G SQL Abfrage über mehrere Tabellen Datenbankprogrammierung 28
H SQL Abfrage - zwei tabellen vergleichen. Datenbankprogrammierung 2
H MySQL Datenbank Abfrage Datenbankprogrammierung 10
André Uhres SQL Abfrage erkennt keine Buchstaben mit Akzenten (z. B. é, è) Datenbankprogrammierung 3
E MySQL Klasse zur Abfrage statisch oder Standard Datenbankprogrammierung 5
J Mit einer Abfrage Worte suchen die in Zwei Tabellen enthalten sind Datenbankprogrammierung 5
G M:N Abfrage Datenbankprogrammierung 2

Ähnliche Java Themen

Neue Themen


Oben