MySQL AbfragenProbleme

Hi, ich habe bei zwei Klassen mit den msql-Abfragen Probleme.

Die erste Klasse ist ein Wörterbuch. Da möchte ich zusätzlich noch nach Oberbegriffen filtern können, so dass dann noch die Begriffe als Liste oder einfach nur als String mit Komma getrennt, ausgegeben werden.

In der Konsole funktioniert es auch soweit. Nur beim TextField in der Gui wird immer nur der letzte Begriff ausgegeben.

Meine Idee war es jetzt, das als Array zu gestalten. Nur das funktioniert nicht so recht. Vielleicht hat ja jemand eine andere Idee wie man es lösen könnte?

Java:
package kendowoerterbuch;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;

public class Woerterbuch extends JFrame implements ActionListener {

    private JLabel text;
    private JLabel oberbegriff;

    private JLabel outputlb;
    private JLabel oberbegrifflb;

    private JTable jTable1;

    private JTextField inputfield;
    private JTextField inputfield2;

    String txt;
    String oberbegrifftxt;

    public static void main(String[] args) {
        new Woerterbuch();   
    }

    public Woerterbuch() {
        super ("Kendo-Wörterbuch");

        getContentPane().setLayout(null);

        text = new JLabel ("Zu suchender Begriff <Enter>: ");

        {getContentPane().add(text);
        text.setBounds(19, 50, 347, 33);
        }

        oberbegriff = new JLabel ("Oberbegriff <Enter>: ");

        {getContentPane().add(oberbegriff);
        oberbegriff.setBounds(19, 70, 347, 33);
        }

        oberbegrifflb = new JLabel ("Oberbegriff: "+oberbegrifftxt);   
        {getContentPane().add(oberbegrifflb);
        oberbegrifflb.setBounds(19, 300, 347, 55);
        }

        outputlb = new JLabel ("Text: "+txt);   
        {getContentPane().add(outputlb);
        outputlb.setBounds(19, 200, 347, 33);
        }

        inputfield = new JTextField(10);
        inputfield.addActionListener(this);

        getContentPane().add(inputfield);
        inputfield.setBounds(250, 50, 70, 21);

        inputfield2 = new JTextField(10);
        inputfield2.addActionListener(this);

        getContentPane().add(inputfield2);
        inputfield2.setBounds(250, 80, 70, 21);

        JButton suche = new JButton ("Suche!");

        getContentPane().add(suche);
        suche.setBounds(19, 150, 150, 21);

        suche.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent evt) {

                Connection con = null;

                try {
                    con = DriverManager.getConnection("jdbc:mysql://localhost:3306/?user=root2&password=geheim");
                    Statement stmt;
                    stmt = con.createStatement();
                    ResultSet rs;
                    String eingabe = inputfield.getText();
                    String oberbegrifftxt = inputfield2.getText();

                    rs = stmt.executeQuery("select * from KendoWB.wb");

                    if (rs.next()) {
                        eingabe.equals(rs.getString("begriff"));
                        System.out.println(rs.getString("txt"));
                        txt = rs.getString("txt");
                        outputlb.setText(txt);

                    } else
                        System.out.println("Kein Eintrag gefunden");

                    System.out.println(oberbegrifftxt);


                    while (rs.next()) {
                        if (oberbegrifftxt.equals(rs.getString("Typ"))) {
                            oberbegrifflb.setText(rs.getString("begriff"));

                            System.out.println(rs.getString("begriff"));
                        }
                    }

                    while (rs.next()) {
                        if (oberbegrifftxt.equals(rs.getString("Typ"))) {
                            String a;
                            oberbegrifflb.setText(a);

                            for (int i = 0; i < 20 ; i++){
                                String[] array = new String[20];
                                array[i] = rs.getString("begriff")
                            }
                        }
                    }


                    rs.close();
                    stmt.close();

                } catch (SQLException e1) {
                    e1.printStackTrace();
                }
            }
        });

        setDefaultCloseOperation(EXIT_ON_CLOSE);
        pack();
        setSize(500, 500);
        setVisible(true);
    }

    public void actionPerformed(ActionEvent e) {       
        String eingabe = inputfield.getText();

        String oberbegrifftxt = inputfield2.getText();           
    }
}

Das zweite Problem habe ich bei der Abfrage eines Passungsrechners. Wenn ich bei der if-abfrage die Toleranzen abfrage, gibt er mir mitunter die falschen werte. Bis Durchmesser(=id) 6 stimmen diese, dann ab Durchmesser 7 - also bei Sprung der Oberen Toleranzwerte - gibt er immer noch die alten aus.
Da der Code ähnlich dem vom Wörterbuch ist und da das Filtern zumindest in der Konsole klappt, müsste es eigentlich so klappen, dass zur id auch die dazugehörigen Werte ausgeben werden.

Ich hab jetzt kein Plan woran es happert. Vielleicht hat ja auch hierzu jemand eine Idee :)

Java:
package passungsrechnersimple;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;

public class GuiPassungsrechnerSimple extends JFrame implements ActionListener {

    private JLabel text;
    private JTextField inputfield;

    public static void main(String[] args) {
        new GuiPassungsrechnerSimple();   
    }

    public GuiPassungsrechnerSimple() {
        super ("Passungsrechner-Gui");

        getContentPane().setLayout(null);

        text = new JLabel ("Durchmesser<Enter>: ");

        {getContentPane().add(text);
        text.setBounds(19, 100, 347, 33);
        }

        inputfield = new JTextField(10);
        inputfield.addActionListener(this);

        getContentPane().add(inputfield);
        inputfield.setBounds(180, 107, 70, 21);

        JButton berechne = new JButton ("Berechne!");

        getContentPane().add(berechne);
        berechne.setBounds(19, 300, 150, 21);
        berechne.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent evt) {
                System.out.println("test");
            }
        });

        setDefaultCloseOperation(EXIT_ON_CLOSE);
        pack();
        setSize(500, 500);
        setVisible(true);
    }

    public void actionPerformed(ActionEvent e) {       
        String eingabe = inputfield.getText();
        int a = Integer.parseInt (eingabe);
        System.out.println(a);
        Connection con = null;

        try {
            con = DriverManager.getConnection("jdbc:mysql://localhost:3306/?user=root2&password=geheim");

            Statement stmt;
            stmt = con.createStatement();
            ResultSet rs;
            rs = stmt.executeQuery("select * from Passungen.EinheitsPassung");
           
            if (rs.next()) {
                eingabe.equals((rs.getString("id")));

                System.out.println(rs.getDouble("Obere Toleranz"));
                System.out.println(+rs.getDouble("untere Toleranz"));
               
            } else
                System.out.println("Kein Eintrag gefunden");

            rs.close();
            stmt.close();

        } catch (SQLException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
    }
}

LG und schönes Wochenende :)
Diana
 

mihe7

Top Contributor
Hi, ich habe bei zwei Klassen mit den msql-Abfragen Probleme.
Du hast noch ganz andere Probleme :)

Was soll denn z. B. bei eingabe.equals(rs.getString("begriff")); passieren? Diese "Anweisungen" sind vollkommen sinnfrei. Der Body Deiner zweiten while-Schleife wird nie durchlaufen werden, weil die Bedingung nach dem Terminieren der ersten while-Schleife nicht erfüllt sein kann.

Warum durchläufst Du manuell alle Sätze und prüfst irgendwas ab, anstatt die DB filtern zu lassen (WHERE-Klausel)?

Vielleicht hat ja jemand eine andere Idee wie man es lösen könnte?
Beschreibe mal, wie Deine DB aufgebaut ist und was Du für welchen Fall als Ausgabe erwartest. Das gilt für beide Probleme.
 

Robat

Top Contributor
Zusätzlich zu dem was @mihe7 sagte:
- deine Klasse macht momentan viel zu viel auf einmal. Teile Logik, Model und GUI in verschiedene Klassen auf, sodass jede Klasse nur noch für einen Aufgabenbereich zuständig ist. Das ist a) übersichtlicher und b) später beim Debugger einfacher Fehler zu finden

{getContentPane().add(outputlb);
outputlb.setBounds(19, 200, 347, 33);
}
Hat es einen besonderen Sinn, dass du diese beiden Zeilen öfter mal in einen eigenen Block steckst?
In deiner zweiten Schleife (die nie durchlaufen werden wird) deklarierst du einen String a und setzt danach den Text von einem Textfeld auf a, obwohl a niemals einen Wert bekommt. Warum?

Und der berühmte Nörgler der bei keinem GUI-Post fehlen darf: leite nicht von JFrame ab. Du willst es nur benutzen, nicht aber um Funktionalität erweitern.
 

Neue Themen


Oben