geänderte SELECT Abfragen

didi577

Bekanntes Mitglied
Hi,

ich habe eine Tabelle fragen in der Datensätze mit IDs aus anderen Tabellen gespeichert werden. Vorher hatte ich Strings mit Namen etc. gespeichert.
Alle meine Abfragen müssen natürlich angepasst werden da anstelle der lesbaren Strings die IDs angezeigt werden. Hier ein Auschnitt aus fragen:
upload_2017-2-1_14-41-22.png
In den Spalten kurs, ort, dozent stehen die IDs aus den anderen Tabellen.
In einer AuswertungsGUI lade ich zum Beispiel eine Combobox mit dem Dozent:
Java:
mysql.ladenBoxDozent(boxDozentM "select DISTINCT dozent from fragen ORDER BY dozent");
Das bringt mir bspw. für den Eintrag fragen_id 81 eine 24 in der Combobox...logisch! Ich habe auch verschiedene Labels in denen ich Werte aus der fragen Tabelle anzeige.

Mein Ziel ist es in den Auswertungen und Labels die Werte der Spalten mit den Strings anstelle der IDs anzuzeigen, z.B. die Spalte name aus der Tabelle dozenten. Mir fehlt jetzt nur der richtige Ansatz hierfür. Löse ich das über geänderte Abfragen mit join etc.?
 

Joose

Top Contributor
Eine andere Variante wäre es ein Extra SELECT abzusetzen um die Daten für einen bestimmten Dozenten zu laden und mit diesen Daten dann Dozent Objekte zu erstellen.
Wieder eine andere Variante wäre es einen ORM zu verwenden
 

didi577

Bekanntes Mitglied
Eine andere Variante wäre es ein Extra SELECT abzusetzen um die Daten für einen bestimmten Dozenten zu laden und mit diesen Daten dann Dozent Objekte zu erstellen.
das ist mein Favorit, da ich hier dem Objekt noch Attribute aus der Dozenten Tabelle mitgeben kann die ich nach der Auswertung noch benötige (zB eine Mail versenden->in der Dozenten Tabelle ist auch die Mailadresse gespeichert)

beim Start der Anwendung befülle ich eine Combobox schon mit Dozentobjekten die dann in der Tabelle fragen gespeichert werden

ich versuche mal etwas zu bauen
 

Thallius

Top Contributor
Wenn du es unbedingt so langsam wie möglich machen willst...

Join sind genau für deinen Anwendungsfall gemacht und wenn du dich da eingelesen hättest, was wir ja mittlerweile wissen das du das nicht so gerne machst, dann hättest du das auch erkannt.

Ich schreibe das hier nur, damit nicht andere die auf der Suche nach einer Lösung für das gleiche Problem diesen Thread hier finden glauben, dass die Lösungen die du benutzt wirklich gut sind.

Du kannst meinetwegen deinen Source weiter vergewaltigen wie du und willst...
 

didi577

Bekanntes Mitglied
bin bei JOINs hängen geblieben und probiere es gerade aus, sieht im MySQL Command Line Client auch schon gut aus, muss es jetzt nur noch in den Code transferieren, in der Combobox wird noch nicht die richtige Tabellenspalte angzeigt

als bekannter Codevergewaltiger habe ich auch eine Chance auf Resozialisierung, ich habe die letzten Tage viele Hinweise von euch implementiert und ne Menge dazu gelernto_O

ich bin halt Betriebswirt und outputorientiert, hier muss ich erst umdenken und lernen das der Input entscheidend ist
 

Tobse

Top Contributor
ich bin halt Betriebswirt und outputorientiert, hier muss ich erst umdenken und lernen das der Input entscheidend ist
Die sind beide gleich wichtig. Der Output ist aber vom Input abhängig. Tust du scheisse rein, kommt 100% sicher scheisse raus. Aber nur weil du Gold rein tust, heisst das nicht, dass das auch wieder rauskommt.

Zum eigentlichen Thema: Meine Vorredner haben recht: JOINs sind auf genau diesen Anwendungsfall maßgeschneidert. Ich schlage vor, dass du zuerst die einzelnen Disziplinen lernst bevor du versuchst einen 10-Kampf zu gewinnen: beschäftige dich erstmal mit SQL und danach damit, wie du das in eine GUI eingebaut bekommst.

P.S.: Wenn einer meiner Arbeitskollegen Code abgiebt, in welchem manuell mit irgendwelchen IDs und Rohen Queries gearbeitet wird müsste er die Schmach der halben Abteilung über sich ergehen lassen. State-of-the-Art ist es, einen O/RM zu benutzen. In der Java-Welt ist das für relationale Datenbanken de-fakto Hibernate. Das ohne fundierte Kenntnisse von SQL einzusetzen ist aber sinnlos (daher ein Grund mehr, sich zuerst SQL genauer anzusehen). Aber bei der Programmierung von tatsächlichen Anwendungen ist es gegenüber rohen SQL Queries ein Unterschied wie Himmel und Erde.
 

didi577

Bekanntes Mitglied
ja Danke die Metapher mit dem überforderten 10 Kämpfer ist sachlich richtig formuliert...und wenn ich hier mit dem Projekt fertig bin werde ich mich auch wieder mehr dem Lernen widmen

nichts desto trotz habe ich weiter gemacht und etwas erreicht, mit dem Aufruf:
Java:
mysql.ladenBoxDozent(
                   boxDozentM,
                   "select DISTINCT name from fragen join dozenten on dozent = dozent_id ORDER BY name");
erreiche ich das die Combobox Dozent mit den Namen und nicht den IDs gefüllt wird. Die Methoode sieht so aus:
Java:
public void ladenBoxDozent(DefaultComboBoxModel boxDozent, String sql) {

       PreparedStatement pst = null;
       ResultSet rs = null;

       try {
           pst = con.prepareStatement(sql);
           rs = pst.executeQuery();
           while (rs.next()) {
               boxDozent.addElement(rs.getString(1));
               System.out.println(rs.getString(1));
           }

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

       } finally {
           if (rs != null && pst != null) {
               try {
                   rs.close();
                   pst.close();
               } catch (SQLException e) {
                   e.printStackTrace();
               }
           }
       }
   }
nun möchte ich, dass eine weitere Combobox "Kurs" gefüllt wird, in Abhängigkeit der Combobox Dozent. Wenn ich in der Konsole den Befehl: select DISTINCT kursnr FROM fragen JOIN kurse ON kurs = kurs_id WHERE dozent="12" ORDER BY kursnr eingebe zeigt er mir das gewünschte Ergebnis. Alle kursnr des Dozenten 12 aus der Tabelle fragen. Aber ich übergebe ja nicht die DozentenID sondern das Ergebnis der Combobox Dozent. Der Aufruf sieht so aus:
Java:
"select DISTINCT kursnr FROM fragen JOIN kurse ON kurs = kurs_id WHERE dozent=? ORDER BY kursnr");
die Methode hierzu:
Java:
public void ladenBoxKurs(DefaultComboBoxModel boxDozentM,
           DefaultComboBoxModel boxKursM, String sql) {

       PreparedStatement pst = null;
       ResultSet rs = null;

       try {
           String dozent = boxDozentM.getSelectedItem().toString();
           pst = con.prepareStatement(sql);
           pst.setString(1, dozent);
           rs = pst.executeQuery();
           while (rs.next()) {
               boxKursM.addElement(rs.getString(1));
           }

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

       } finally {
           if (rs != null && pst != null) {
               try {
                   rs.close();
                   pst.close();
               } catch (SQLException e) {
                   e.printStackTrace();
               }
           }
       }
   }
Die Ausführung führt dazu dass die Box Dpzent richtig mit den Namen gefüllt wird aber die Box Kurs nicht. Ich gehe davon aus dass im Aufruf der Part
Java:
WHERE dozent=?
unvollständig ist. Das funktionierte nur als ich die Abfragen direkt über die Spaltenwerte aus der Tabelle fragen gemacht habe. Natürlich habe ich schon einiges aus verschiedenen SQL Tutorials gelesen und versucht aber kein gewünschtes Ergebnis bekommen. Kann mir jemand einen zielführenden Tipp geben?
 

didi577

Bekanntes Mitglied
ich verknüpfe das schon aber momentan nur in den Bereichen die mein Projekt direkt betreffen, ich muss aber an vielen Stellen nochmal an die Basics zurück und wiederholen
 

didi577

Bekanntes Mitglied
nun möchte ich, dass eine weitere Combobox "Kurs" gefüllt wird, in Abhängigkeit der Combobox Dozent.
habe mir die Lösung erarbeitet ;)
Java:
"select DISTINCT kursnr, name FROM fragen INNER JOIN kurse ON kurs = kurs_id INNER JOIN dozenten ON dozent = dozent_id WHERE name=? ORDER BY kursnr");
da Java Proggis Estheten sind habe ich sauber INNER JOIN und nicht nur JOIN geschrieben;)
 

Meniskusschaden

Top Contributor
Ich glaube, falls es einen Mathe-Professor Müller und auch einen Psychologie-Professor Müller gibt und man in der Combo-Box den Mathe-Müller wählt, würde man trotzdem nicht nur die Mathe- sondern auch die Psychologie-Kurse bekommen.
 

MattElg

Mitglied
Und hast Du die ResultSets einmal, dann kannst Du doch über das ResultSet getColumnName die Namen der Spalten.
rs.getColumnName(i) - gibt den Namen der Spalten i
Also musst Du faktisch nur die Daten deiner Angaben per Select, meinetwegen auch per Join abfragen und schon hast Du auch die Spaltennamen, wenn ich es richtig verstand.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Anzahl geänderte Records Datenbankprogrammierung 2
krgewb SELECT ohne IdClass-Annotation Datenbankprogrammierung 3
I Hibernate / JPA - Spaltenname von Query (Select) bekommen Datenbankprogrammierung 6
OnDemand Select * from bringt keine Rückgabe Datenbankprogrammierung 49
OnDemand Select vs Update ins blaue, was ist teurer? Datenbankprogrammierung 11
M JPA: select all mit unterschiedlichem Tablename Datenbankprogrammierung 2
A MySQL Select und Insert in Java Datenbankprogrammierung 15
J JPA: Wie sieht der select aus? Datenbankprogrammierung 2
N SQLite Hibernate und Aufruf von Funktion SELECT last_insert_rowid() Datenbankprogrammierung 2
T sqlite select Datenbankprogrammierung 12
D Oracle NullPointerException bei select mit Null Values Datenbankprogrammierung 5
F MySQL Was bedeuten die Einzelnen Zeichen in Select Querrys? Datenbankprogrammierung 1
J SQL SELECT mit einem Array Datenbankprogrammierung 1
J SELECT Abfrage/Suche Datenbankprogrammierung 4
E Kann man in einer if-Bedingung auch SELECT-Statements überprüfen? Datenbankprogrammierung 23
M SQL-Exception trotz funktionierendem SELECT Datenbankprogrammierung 4
U PostgreSQL SELECT Statement Datenbankprogrammierung 5
L Select Anweisung wird falsch interpretiert Datenbankprogrammierung 3
C HSQLDB Platzhalter in SELECT Datenbankprogrammierung 6
I SELECT bei Datenbankverbindung Datenbankprogrammierung 6
C MySQL JPA - namedQuery (SELECT) -getResultList() - liefert falsches Ergebnis Datenbankprogrammierung 1
S select: alle ergebnisse ermitteln Datenbankprogrammierung 5
G SQLite SQLite Select für View vereinfachen/optimieren Datenbankprogrammierung 4
C SQL-Statement SELECT über 3 Tabellen Datenbankprogrammierung 5
H HSQLDB insert .... values("test1",select test2 from foo) Datenbankprogrammierung 2
D JDBC insert mit select abfrage Datenbankprogrammierung 5
W SELECT oder Programm-Logik Datenbankprogrammierung 10
J Hibernate Select auf Parameterliste Datenbankprogrammierung 3
T MySQL Dynamisch Suchen Select Datenbankprogrammierung 4
D ArrayList in Select Datenbankprogrammierung 12
N Select mit join Datenbankprogrammierung 3
F Oracle select sum() join select sum() Datenbankprogrammierung 9
B SELECT ja - INSERT nein (MySQL) Datenbankprogrammierung 3
R Oracle Performance bei SELECT mit vielen Reihen Datenbankprogrammierung 5
T MySQL Db select * und Insert schlagen fehl Datenbankprogrammierung 2
I Select-Statement optimieren Datenbankprogrammierung 14
M Variable in SQL SELECT * FROM ... WHERE mithilfe von PreparedStatement benutzen? Datenbankprogrammierung 28
R Derby/JavaDB Möglichkeit von einem Random Select! Datenbankprogrammierung 6
B Mehrfachschachtelung SELECT Datenbankprogrammierung 2
T MySQL Select: Zusammenfassen von Daten und bilden von Durchschnitt? Datenbankprogrammierung 4
GianaSisters MySQL Datenbank Select error Datenbankprogrammierung 5
R Select Statement als temporärer Table Datenbankprogrammierung 7
R Derby/JavaDB Select Statement Where bedingung will nicht ganz! Datenbankprogrammierung 4
R Derby/JavaDB Select TOP Statement geht nicht Datenbankprogrammierung 3
S MySQL Problem mit SELECT bzw encoding Datenbankprogrammierung 4
B HSQLDB Probleme mit Select...Where Abfrage Datenbankprogrammierung 16
F wie funktioniert if Statement in SELECT? Datenbankprogrammierung 2
J [Hibernate] Select Statement Datenbankprogrammierung 4
A SQLite SELECT von ungleichen Spaltenpaaren Datenbankprogrammierung 10
Eldorado MySQL SELECT mit GROUP BY und INNER JOIN Datenbankprogrammierung 2
M Hibernate JPQL SELECT optional? Datenbankprogrammierung 2
C Datenbank-Abfrage, if im Select Datenbankprogrammierung 9
G Aufruf von SELECT INTO Datenbankprogrammierung 8
B H2 PreparedStatement SELECT * FROM ? Datenbankprogrammierung 4
X Select Query auf Substring Datenbankprogrammierung 2
S Select eines bestimmten Datensatzes Datenbankprogrammierung 4
M Select * from mydaten where ... Datenbankprogrammierung 4
T Unerwartete Datenbankausgabe bei "select now()" (es wird ein .0 angehängt) Datenbankprogrammierung 5
M Probleme bei Select in Schleife Datenbankprogrammierung 7
G SELECT liefert leere Zeilen Datenbankprogrammierung 32
M SELECT longtext -> als String behandeln Datenbankprogrammierung 6
H Select in einem Select Datenbankprogrammierung 7
G Select- Abfrage Datenbankprogrammierung 19
S Insert mit Select Datenbankprogrammierung 6
G MSSQL Server SELECT Abfrage funktioniert nicht Datenbankprogrammierung 4
R SELECT aus hsqldb mit Parameter Datenbankprogrammierung 2
H Beim insert bekomme ich den Fehler missing select keyword Datenbankprogrammierung 2
A Problem mit einem Select-Befehl Datenbankprogrammierung 5
E Neues select auf ein vorhandenes Resultset Datenbankprogrammierung 11
A SELECT-Anweisung liefert keine Datensätze zurück Datenbankprogrammierung 9
S Select über mehrere Datenbanksysteme Datenbankprogrammierung 14
P SELECT Datenbankprogrammierung 20
T select Abfrage in Java Integer speichern ? Datenbankprogrammierung 2
B fehler bei select befehl Datenbankprogrammierung 5
S Select von bis in DB2 Datenbankprogrammierung 8
S Select mit PreparedStatement Datenbankprogrammierung 2
E Ein If und ein SELECT in Oracle? Datenbankprogrammierung 2
T Select Statement auf Relation Datenbankprogrammierung 3
S PostgreSQL SELECT/UPDATE etc. Datenbankprogrammierung 4
4 Probleme mit Select abfrage Datenbankprogrammierung 4
G Fehler in der select-Abfrage Datenbankprogrammierung 3
N SELECT: Datensatz sperren Datenbankprogrammierung 6
isowiz SELECT SUM() Ergebnis in Java abfragen Datenbankprogrammierung 6
T LIMIT In SELECT Anweisung Datenbankprogrammierung 4
R Select und Insert in Schleife - Problem mit ResultSet Datenbankprogrammierung 2
G SELECT Name= " " verhindern Datenbankprogrammierung 5
G Syntax für Select - Abfrage mit Variablen Datenbankprogrammierung 39
J SELECT-Statement Datenbankprogrammierung 4
R Select auf der Konsole ausgeben Datenbankprogrammierung 2
D brauche mal kurz hilfe bei einem select-stmt Datenbankprogrammierung 6
G Select-Abfragen sind sehr langsam Datenbankprogrammierung 7
D HSQLSB SELECT Datenbankprogrammierung 9
N Datenbank abfragen nach bestimmten Wort Datenbankprogrammierung 7
J Datenbank abfragen Datenbankprogrammierung 6
D Daten aus der Firebase-Echtzeitdatenbank abfragen und in Variablen speichern (JAVA) Datenbankprogrammierung 0
O SQL Abfragen mit Mini Datenbank Datenbankprogrammierung 12
M Sql Abfragen Datenbankprogrammierung 1
D 2 Abfragen zusammenfassen Datenbankprogrammierung 7
D MySQL Geburtsdatum per KW abfragen Datenbankprogrammierung 1
W Daten in Java intern abfragen Datenbankprogrammierung 1

Ähnliche Java Themen


Oben