JComboboxen in Abhängigkeiten füllen

didi577

Bekanntes Mitglied
Hallo ihr Wissenden,

Ich baue eine Datenabfrage aus einer Tabelle "fragen". Um die Antworten in der Anzeige zu filtern habe ich Comboboxen die auf Spalten in der Tabelle zugreifen:
Java:
public void ladenBoxenKurs() {
       
       Connection con = null;
       try {
           con = DriverManager.getConnection("jdbc:mysql://localhost:3306/schulaus?user=root&password=#Patrick1");
           System.out.println("[MySQL] Die Verbindung zur MySQL wurde hergestellt");
           Statement stmt = (Statement) con.createStatement();
           ResultSet rs1 = stmt.executeQuery("select DISTINCT kurs from fragen"); // DISTINCT verhindert Mehrfachnennung
           while(rs1.next()) {
           boxKursM.addElement(rs1.getString(1));   
           }
           ResultSet rs2 = stmt.executeQuery("select DISTINCT dozent from fragen"); 
           while(rs2.next()) {
           boxDozentM.addElement(rs2.getString(1));   
           }
           ResultSet rs3 = stmt.executeQuery("select DISTINCT ort from fragen"); 
           while(rs3.next()) {
           boxOrtM.addElement(rs3.getString(1));   
           }
           ResultSet rs4 = stmt.executeQuery("select DISTINCT datum from fragen"); 
           while(rs4.next()) {
           boxDatumM.addElement(rs4.getString(1));   
           }
           con.close();
       } catch (SQLException e) {
           System.out.println(e);
           e.printStackTrace();
         }
       
   }

Ich möchte erreichen, dass mir die Comboboxen nur Werte aus der Tabelle anzeigen wenn es auch mindestens einen Werte mit Daten der anderen Comboboxen gibt. Die Boxen dienen akso also als Filter. Bis jetzt funktionieren Sie unabhängig voneinander. Die Daten befinden sich jeweils in einem DefaultComboboxModel.
Kann mir jemand helfen wie ich das Problem löse??
 

Joose

Top Contributor
Erkläre das Zusammenspiel der ComboBoxen genauer.
Die gleiche Frage kann von mehreren Dozenten gestellt werden? Sprich wählst du eine Frage aus werden nur die Dozenten angezeigt welche diese Frage gestellt haben (und in weiterer Abhängigkeit noch Ort und Datum).
Wenn du wiederrum einen Dozenten auswählst, sollen nur die Fragen gezeigt werden die dieser Dozent gestellt hat?

Warum ladest du alle ComboBox gleich zu Beginn? Ich würde es der Reihe nach machen.
Also mal nur die Fragen laden, sobald eine Frage ausgewählt wurde ladest du alle Dozenten die diese Frage gestellt haben in die ComboBox.
Wenn ein Dozent gewählt wurde dann ladest du den Ort usw.
 

didi577

Bekanntes Mitglied
Also folgendes habe ich vor:
Wir haben in der Firma für Schulungsteilnehmer Fragebögen (Papier) die ausgefüllt werden. Ich muss diese auswerten. Dafür habe ich ein Programm geschrieben:
1. hiererfasse ich jeden Fragebogen (18 Fragen) und speichere ihn in einer MySQL Tabelle
upload_2016-12-23_8-16-37.png
2. Unter Bearbeiten rufe ich den Auswertungsdialog auf:
upload_2016-12-23_8-19-22.png
ich habe es jetzt wie empfohlen umgebaut. beim öffnen lädt nur Dozent. Alles andere soll in Abhängigkeit der Auswahl der Combobox und der vorhandenen erfassten Daten laden. Die Reihenfolge siehe Screenshot von oben nach unten. Die Daten sollen rechts im Fenster angezeigt werden. Diese sollen entsprechend der Comboboxen angezeigt werden. Wenn also ein Dozent ausgewählt ist sollen alle Werte für den Dozenten angezeigt werden. Wenn ich dann den Kurs auswähle sollen die Werte zum Dozenten und dem Kurs angezeigt werden etc. Wie ich die ausgewerteten Daten rechts anzeige ist noch offen. Ich dachte an eine Tabell mit zwei Zeilen und Spalten k.A. bis 1. in der ersten Zeile fix die Titel der JButton und in der zweiten Zeile die Summe der jeweils gespeicherten Werte.
Anbei mein bisheriger Code für die Abfrage der Boxen und die ActionLiustener:
Java:
public void ladenBoxDozent() {
       
       Connection con = null;
       try {
           con = DriverManager.getConnection("jdbc:mysql://localhost:3306/schulaus?user=root&password=#Patrick1");
           System.out.println("[MySQL] Die Verbindung zur MySQL wurde hergestellt");
           Statement stmt = (Statement) con.createStatement();
           ResultSet rs1 = stmt.executeQuery("select DISTINCT dozent from fragen");
           while(rs1.next()) {
           boxDozentM.addElement(rs1.getString(1));   
       }
           con.close();
           } catch (SQLException e) {
               System.out.println(e);
               e.printStackTrace();
           }
       }
       
   public void ladenBoxKurs() {
       
       Connection con = null;
       try {
           con = DriverManager.getConnection("jdbc:mysql://localhost:3306/schulaus?user=root&password=#Patrick1");
           System.out.println("[MySQL] Die Verbindung zur MySQL wurde hergestellt");
           Statement stmt = (Statement) con.createStatement();
           ResultSet rs2 = stmt.executeQuery("select DISTINCT kurs from fragen where fragen="+boxDozentM.getSelectedItem()); // DISTINCT verhindert Mehrfachnennung
           while(rs2.next()) {
           boxKursM.addElement(rs2.getString(1));   
           }
           con.close();
           } catch (SQLException e) {
               System.out.println(e);
               e.printStackTrace();
           }
   }
       
   public void ladenBoxOrt() {
       
       Connection con = null;
       try {
           con = DriverManager.getConnection("jdbc:mysql://localhost:3306/schulaus?user=root&password=#Patrick1");
           System.out.println("[MySQL] Die Verbindung zur MySQL wurde hergestellt");
           Statement stmt = (Statement) con.createStatement();
           ResultSet rs3 = stmt.executeQuery("select DISTINCT ort from fragen");
           while(rs3.next()) {
           boxOrtM.addElement(rs3.getString(1));   
           }
           con.close();
           } catch (SQLException e) {
               System.out.println(e);
               e.printStackTrace();
           }
   }
   
   public void ladenBoxDatum() {
       
       Connection con = null;
       try {
           con = DriverManager.getConnection("jdbc:mysql://localhost:3306/schulaus?user=root&password=#Patrick1");
           System.out.println("[MySQL] Die Verbindung zur MySQL wurde hergestellt");
           Statement stmt = (Statement) con.createStatement();   
           ResultSet rs4 = stmt.executeQuery("select DISTINCT datum from fragen");
           while(rs4.next()) {
           boxDatumM.addElement(rs4.getString(1));   
           }
           con.close();
           } catch (SQLException e) {
               System.out.println(e);
               e.printStackTrace();
           }
   }
   
   private class BoxDozentAusAction implements ActionListener {
       
       @Override
       public void actionPerformed(ActionEvent e) {
           
           if (boxDozent.getSelectedIndex()>1) {
               boxKurs.setEnabled(true);
               ladenBoxKurs();
           }
           
       }
   }
   private class BoxKursAusAction implements ActionListener {
       
       @Override
       public void actionPerformed(ActionEvent e) {
           
           if (boxKurs.getSelectedIndex()>1) {
               boxOrt.setEnabled(true);
               ladenBoxOrt();
           }
   
       }
   }
   
   private class BoxOrtAusAction implements ActionListener {
       
       @Override
       public void actionPerformed(ActionEvent e) {
           
           if (boxOrt.getSelectedIndex()>1) {
               boxDatum.setEnabled(true);
               ladenBoxDatum();
           }
           
       }
   }
   
   private class BoxDatumAusAction implements ActionListener {
       
       @Override
       public void actionPerformed(ActionEvent e) {
           
   
           
       }
   }
Leider kommt nach der Auswahl der ersten Box gleich ein Fehler:
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: 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 'Berndt' at line 1
Berndt ist der Nachname eines Dozenten. Ich habe aber in der SPalte Dozent der Vor- und Nachnamen.

Den Fehler zeigt er hier an:
Java:
           ResultSet rs2 = stmt.executeQuery("select DISTINCT kurs from fragen where fragen="+boxDozentM.getSelectedItem()); // DISTINCT verhindert Mehrfachnennung

ich denke insgesamt sehr ambitioniert für einen Anfänger aber ich beisse mich da durch und mnit Hilfe dieses Forums konnte ich bislang jede Nuss knacken ;)
 

Joose

Top Contributor
Den Fehler zeigt er hier an:
Java:
           ResultSet rs2 = stmt.executeQuery("select DISTINCT kurs from fragen where fragen="+boxDozentM.getSelectedItem()); // DISTINCT verhindert Mehrfachnennung

ich denke insgesamt sehr ambitioniert für einen Anfänger aber ich beisse mich da durch und mnit Hilfe dieses Forums konnte ich bislang jede Nuss knacken ;)

Ich nehme an beim Dozenten handelt es sich um einen String. Strings müssen in SQL Statements unter Anführungszeichen gesetzt werden! (Grundlagen von SQL!)

Ich habe dir schon in einem anderen Thread ans Herz gelegt, dir deine Statements nicht per String zusammenzubauen!
Verwende PreparedStatements, dadurch ersparst du dir auch das Escapen von Strings ;)

Ein weiterer Kritikpunkt an deinem Code:
In jeder ladenBox*() Methode erstellst du deine Connection, öffnest sie, erstellst ein Statement führst es aus, wertest es auch und schließt am Ende dann die Connection -> DUPLICATE CODE, den man vermeiden sollte ;)
Lagere das Erstellen und Schließen der Verbindung in eine eigene Datenbankklasse aus! Wenn sich das Passwort oder die URL zur Datenbank ändert musst du jede Methode anpassen.
Außerdem liefert dir con.createStatement(..) schon ein Statement zurück, warum castest du nochmal zu einem Statement?
 

didi577

Bekanntes Mitglied
ok die Verbindung werde ich in eine MySQL Klasse auslagern wenn ich die Gesamtfunktionalität soweit habe

Ich nehme an beim Dozenten handelt es sich um einen String. Strings müssen in SQL Statements unter Anführungszeichen gesetzt werden! (Grundlagen von SQL!)
ich frage mich an welcher Stelle ich die Anführungszeichen setzen muss. ich habe diese Sysntax aus http://stackoverflow.com/questions/21430325/set-result-of-mysql-query-into-a-jcombobox


Ich habe dir schon in einem anderen Thread ans Herz gelegt, dir deine Statements nicht per String zusammenzubauen!
Verwende PreparedStatements, dadurch ersparst du dir auch das Escapen von Strings ;)
das werde ich auch noch umbauen, ich bin ja wohl bisher nicht schlecht ;)

Außerdem liefert dir con.createStatement(..) schon ein Statement zurück, warum castest du nochmal zu einem Statement?
kann ich die Zeilen aus den einzelnen Methoden zum laden der Boxen entfernen?

Danke schonmal für Deine Unterstützung
 

Thallius

Top Contributor
das werde ich auch noch umbauen, ich bin ja wohl bisher nicht schlecht ;)

Ganz ehrlich? Doch bist Du. Du verstehst eigentlich nichts von dem was Du da machst. Du kopierst Dir Code aus dem Internet und hoffst das er so funktioniert wie Du es willst. Du hast null Konzept und keinerlei System.

Wie wäre es Du liest erstmal die Grundlagen von mySQL durch? Wenn Du nicht einmal weißt wie man einen Query richtig aufbaut, dann will ich gar nicht wissen wie deine DB aussieht. Normalisierung dürfte dann sicher genauso ein Fremdwort sein wie SQL-Injection und andere grundlegend wichtige Dinge.

Was Du da machst ist, als wenn ich mir heute ein Skalpell ausleihe und einfach mal Deinen Bauch aufschneide um zu sehen wie ich am besten den Blinddarm entferne. Wenn ich nicht weiter komme, schau ich halt kurz ins Internet wie es geht und probiere das dann aus.....
 

Joose

Top Contributor
http://stackoverflow.com/questions/21430325/set-result-of-mysql-query-into-a-jcombobox
Schön und gut dass du das Internet zur Hilfe nimmst, aber du solltest eben wie Thallius schon sagt nicht nur mit Code aus dem Internet arbeiten sondern dir auch die Grundlagen zu einem Thema anschauen! (in diesem Fall eben Datenbanken und SQL)

Hier wäre ein Link welcher dir eine korrekte Syntax enthält und aber auch zeigt die PreparedStatements eingesetzt werden:
http://stackoverflow.com/questions/24644882/passing-java-string-variable-in-mysql-query

kann ich die Zeilen aus den einzelnen Methoden zum laden der Boxen entfernen?
Nein! Bei dieser Frage zeigt sich was Thallius anspricht. Weißt du denn genau was diese Zeile macht? Wofür das (Statement) vor dem con.createStatement steht?
 

didi577

Bekanntes Mitglied
harte Worte Jungs...
Ich verstehe noch nicht alles. Richtig. Bisher habe ich immer zuerst gemacht und dann im Laufe der Zeit auch verstanden. Ich habe vor einiger Zeit auch mal einen Wochenendkurs zu mySQL besucht, ich habe den Java Viedeo Kurs gekauft, gesehen und geübt, die Insel Bücher durchforstet. Mein Problem ist hier ganz klar, das ich neues Terrain betrete und beides Neues gleich verbinden will (JAVA, MySQL). Als Feierabendprogrammierer ein dickes Brett. Als Führungskraft in einem Unternehmen schätze ich übrigens am meisten die Mitarbeiter, die sich die großen Aufgaben vornehmen und dabei auch scheitern und daraus lernen ;)
Aber ok, ich danke euch trotzdem für die bislang guten Hinweise die mich meist auf den richtigen Weg bringen.

...und jetzt widme ich mich gleich wieder meiner Lieblingsbaustelle um meinen Query richtig zu bauen
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
F Problem mit Auslesen mehrerer jComboBoxen Java Basics - Anfänger-Themen 6
S Problem mit jComboBoxen Java Basics - Anfänger-Themen 5
S 2 JComboBoxen miteinander verknüpfen Java Basics - Anfänger-Themen 4
G Zwei JComboBoxen Java Basics - Anfänger-Themen 11
A Wie - 2 JComboBoxen "verdrahten" ? Java Basics - Anfänger-Themen 7
M [SOLVED]JComboBoxen dynamisch erstellen und abfragen Java Basics - Anfänger-Themen 2
M Frage bzgl. Testbarkeit von Methoden in Relation zu Ihren Abhängigkeiten Java Basics - Anfänger-Themen 11
H Abhängigkeiten (key-value ) Java Basics - Anfänger-Themen 19
M Abhängigkeiten Java Basics - Anfänger-Themen 13
I Abhängigkeiten zweier Klassen Java Basics - Anfänger-Themen 25
C Abhängigkeiten zwischen Projekten entfernen Java Basics - Anfänger-Themen 6
G Area mit Teil-Image füllen Java Basics - Anfänger-Themen 0
N Array beim erstellen mit Werten füllen Java Basics - Anfänger-Themen 6
emx-zee Erste Schritte NullPointerException, Array mit zufälligen Zahlen füllen Java Basics - Anfänger-Themen 2
Poppigescorn String mit mehreren Wörtern füllen? Java Basics - Anfänger-Themen 4
sashady 2D-Array mit Zahlenmuster füllen Java Basics - Anfänger-Themen 4
J Ist es möglich einen int Array wirklich leer zu initialisieren oder zu füllen? Java Basics - Anfänger-Themen 21
java3690 Java- liste füllen ud die werte addieren Java Basics - Anfänger-Themen 13
Z Char Array an zufälligen stellen mit einem "x" füllen. Java Basics - Anfänger-Themen 4
java3690 Liste mit zufälligen zahlen füllen Java Basics - Anfänger-Themen 27
T Array füllen Java Basics - Anfänger-Themen 11
B Objekt von EJB in Controller (CDI) - Klasse füllen? Java Basics - Anfänger-Themen 3
J Combobox füllen mit Wertausgabe von andere Klasse Java Basics - Anfänger-Themen 3
A Array richtig füllen Java Basics - Anfänger-Themen 2
krgewb Array später füllen Java Basics - Anfänger-Themen 1
E Arrays nach best Muster füllen Java Basics - Anfänger-Themen 4
A Ein Array mit zufälligen Zahlen füllen Java Basics - Anfänger-Themen 4
M jTabel mit Daten Füllen Java Basics - Anfänger-Themen 5
neerual Feld mit Einsen und Nullen füllen und überschreiben Java Basics - Anfänger-Themen 1
S JTable mit Daten füllen Java Basics - Anfänger-Themen 7
B Array via Schleife mit ungeraden bzw geraden Zahlen füllen Java Basics - Anfänger-Themen 7
G Model mit Models füllen Java Basics - Anfänger-Themen 9
T Best Practice Liste geschickt füllen Java Basics - Anfänger-Themen 5
Bluedaishi Datum in Jtextarea füllen Java Basics - Anfänger-Themen 5
C Endlosschleife bei füllen von Daten im JTable Java Basics - Anfänger-Themen 5
D Best Practice Objekt automatisch im Konstruktor füllen? Java Basics - Anfänger-Themen 9
L Feld mit beliebiger Anzahl von Buchstaben füllen... Java Basics - Anfänger-Themen 5
A Methoden Array mit Methode nacheinander füllen Java Basics - Anfänger-Themen 3
T Arrays mit Schleife füllen Java Basics - Anfänger-Themen 11
K Array mit for-each Schleife füllen Java Basics - Anfänger-Themen 5
Z Array-Index einmalig je mit Random füllen Java Basics - Anfänger-Themen 7
K "Elegantes" Füllen eines Models? Java Basics - Anfänger-Themen 20
W String in einer Zeile mit Alphabet füllen? Java Basics - Anfänger-Themen 8
K String Array basierend auf int Array füllen Java Basics - Anfänger-Themen 2
Y Erste Schritte Spielfeld, Array füllen mit Treffern...?! Java Basics - Anfänger-Themen 3
B generische LinkedList nach Häufigkeit der Elemente füllen Java Basics - Anfänger-Themen 6
N Arrays mit Zufallzahlen füllen und Statistiken berechnen Java Basics - Anfänger-Themen 5
K Zweidimensionales Array erstellen und zufällig mit 0 und 1 füllen Java Basics - Anfänger-Themen 11
P zweidimensionales Array anlegen und mit DB-Daten füllen Java Basics - Anfänger-Themen 14
W Erste Schritte füllen Attribute java Klasse in for Schleife und Array Java Basics - Anfänger-Themen 16
L Subklasse von ArrayList nur mit bestimmten Objekten füllen Java Basics - Anfänger-Themen 1
B Methoden Array mit zufälligen Zahlen füllen Java Basics - Anfänger-Themen 4
B Methoden 2D Arrays füllen Java Basics - Anfänger-Themen 3
C zwei dimensionales array mit "1 " füllen Java Basics - Anfänger-Themen 8
H zweidimensionales array füllen Java Basics - Anfänger-Themen 6
JG12111989 2D Array mit Array[] füllen Java Basics - Anfänger-Themen 21
J Array mit Zahlen füllen Java Basics - Anfänger-Themen 28
S JTable dynamisch mit Datenbankinhalten füllen Java Basics - Anfänger-Themen 6
W JTable mit einem JButton-Array füllen Java Basics - Anfänger-Themen 4
T Progressbar füllen? Java Basics - Anfänger-Themen 3
V Methoden Matrix als 1D Array mit Werten füllen Java Basics - Anfänger-Themen 12
R ActionListener mit for Schleife füllen. Java Basics - Anfänger-Themen 4
S JComboBox automatisch füllen Java Basics - Anfänger-Themen 3
L OOP Grafik in Circle Objekt füllen Java Basics - Anfänger-Themen 3
B Array erstellen,ausgeben,mit zufallszahlen füllen aber wie ? Java Basics - Anfänger-Themen 1
B Collections ArrayList füllen - Anfängerfrage Java Basics - Anfänger-Themen 1
M OOP Liste füllen mit Strings Java Basics - Anfänger-Themen 9
S Mehrdimensionales Array füllen Java Basics - Anfänger-Themen 1
S OOP Klasse mit static-Eigenschaften - HashMap füllen Java Basics - Anfänger-Themen 6
P Ein Array mit der Eingaber der User füllen und ausgeben Java Basics - Anfänger-Themen 6
S Textdatei einlesen und JFrame füllen Java Basics - Anfänger-Themen 14
S JTabel korrekt mit Datensätzen aus ResultSet füllen Java Basics - Anfänger-Themen 4
I String mit Nullen füllen Java Basics - Anfänger-Themen 4
C JTextField füllen Java Basics - Anfänger-Themen 5
M Kann einen Array nicht füllen, im Nachhinein nur "null"-Werte Java Basics - Anfänger-Themen 11
M char Array füllen Java Basics - Anfänger-Themen 2
X JTable mit Inhalten aus JTextField o.ä. füllen Java Basics - Anfänger-Themen 4
A List mit integern füllen Java Basics - Anfänger-Themen 4
L String array mit split füllen Java Basics - Anfänger-Themen 14
Spin Blatt mit Bildern füllen Java Basics - Anfänger-Themen 5
S externe Webseiten füllen Java Basics - Anfänger-Themen 5
1 Erste Schritte Progressbar füllen ?? Java Basics - Anfänger-Themen 5
P Liste in einer Klasse füllen und mehreren anderen Klassen lesend verwenden Java Basics - Anfänger-Themen 5
F JTable zur laufzeit füllen Java Basics - Anfänger-Themen 7
P Erste Schritte JTable mit Daten aus Acces DB füllen und Actionlistener einsetzen Java Basics - Anfänger-Themen 29
H Methoden Variable mit Methode füllen? Java Basics - Anfänger-Themen 10
T Erste Schritte Int Array zufällig mit Zahlen füllen Java Basics - Anfänger-Themen 7
P Objekt mit Werten aus Array füllen Java Basics - Anfänger-Themen 10
L GridLayout mit JLabel-Array füllen Java Basics - Anfänger-Themen 12
J 2 JTables zusammenhängend füllen Java Basics - Anfänger-Themen 3
H Unterquadrate bei Sudoku füllen Java Basics - Anfänger-Themen 9
X Array Füllen Java Basics - Anfänger-Themen 16
Joew0815 Homepage Textfeld füllen und Button klicken Java Basics - Anfänger-Themen 10
E Array mit Zufallswerten von 1 bis 45 ohne Wiederholung füllen Java Basics - Anfänger-Themen 21
K Aus Variable aus Datei füllen Java Basics - Anfänger-Themen 8
E Tablemodel füllen..mit gefilterten Daten Java Basics - Anfänger-Themen 2
K ArrayList random füllen Java Basics - Anfänger-Themen 2
E Input/Output Inputstream während der Laufzeit füllen Java Basics - Anfänger-Themen 2
J JTable mit Daten aus Datenbank füllen Java Basics - Anfänger-Themen 3
P Collections Vector füllen in for-Schleife Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben