Daten aus Zwei Verschiedenen Tabellen zu einer Liste


#1
Guten Tag,

ich habe ein kleines Problem
und zwar möchte ich zu einer Liste noch zusätzlich Daten aus einer anderen Datenbank Tabelle dazu holen, jedoch entnimmt er nur den ersten Datensatz und lässt die anderen in ruhe.

Versetzen der While schleife bringt mir nix,
weil dann die anderen Daten sprich ID, Name,Vorname etc. immer Zeile 1 der Datenbank ist.

Mein Ziel ist es in der Liste "Person" für jeden noch die Mail hinzu zufügen.

Weiß jemand wo der Fehler hier liegt?

Java:
    Statement st =null; 
            String query1 = "SELECT * FROM ta_kommunikation";        
            st=conn.createStatement();
            ResultSet rs1 = st.executeQuery(query1);
    
        
            Statement stmt = null;
            String query = "SELECT * FROM ta_person";
            stmt = conn.createStatement();
            ResultSet rs = stmt.executeQuery(query);
            
            
            ArrayList<Person> Person = new ArrayList<Person>();
            
            while (rs1.next()){
            while (rs.next()) {
                int id = rs.getInt("psn_id");
                String lastName = rs.getString("psn_nachname");
                String firstName = rs.getString("psn_vorname");
                int gday = rs.getInt("psn_geburtstag");
                int gmonth = rs.getInt("psn_geburtsmonat");
                int gyear = rs.getInt("psn_geburtsjahr");
                
                String mail = rs1.getString("kom_Email");
            
            
                Person.add(new Person( lastName, firstName,mail, MonthDay.of(gmonth, gday)));
 
#2
Der Fehler liegt bei der While-Schleife, er geht mit dem Ersten Datensatz rein, arbeitet mit diesem solange die innere schleife Fertig ist, deswegen bleibt die Mail immer die selbe, aber wie Löst man das dann.
Hätte schon überlegt, zu der Liste Person eine Liste hinzu zufügen, mit den Mails, würde das gehen?
Mein Ziel ist es ja, dass zu jeder Person seine Mail dazu passt.
 

melmager

Erfahrenes Mitglied
#3
Das geht eher über ein Join der Datenbank Tabellen.
Vorraussetzung ist das ta_kommunikation und ta_person ein gemeinsames Feld haben wie zb eine PersonID oder ähnliches.
Bedeutet du Verküpfst die beiden Tabellen über ein feld und dann machste eine weil Schleife.

Poste am besten mal den gesamten Aufbau der beiden Tabellen - welche felder sind denn da ?
dan bekommen wir auch den Join hin :)
 
#4
Heey melmager, danke für deine Hilfe:

Tabellen:
ta_person:
psn_id
nachname
vorname
geburtstag
geburtsmonat
geburtsjahr

ta_kommunikation:
kom_id
kom_psn_id
kom_grp_id
kom_mail


die psn Id soll die Verknüpfung sein.
Sprich du hast in tabelle Person mit der ID 1 Name: Stein Vorname: Jonas etc.
In Tabelle Kommunikation ist dann die kom_psn_Id genau dieser Jonas bzw Datensatz/Zeilen satz
Gruppen Id spielt momentan keine rolle, lass dich deswegen nicht verwirren.
 

melmager

Erfahrenes Mitglied
#5
Code:
String query = "select * from ta_person left join ta_kommuikation on ta_person.psn_id = ta.kommunikation.kom_psn_id";
sollte deine Tabellen verbinden
und dann nur noch eine while schleife
 
#6
@melmager

Danke dir, es funktioniert soweit ganz gut, aber da hätte ich noch eine Frage,
Wenn ich in SQL bei der Tabelle Kommunikation, die Person Id auf Fremdschlüssel stelle, da dieser Ja von der ta_Person kommt, wie schreibe ich das?

Weil ich sonst Null für die E-Mail bekomme

Aber ansonsten Funktioniert es, nur halt ohne Fremdschlüssel, aber sonst vielen Dank! <3