# JTable mit Daten aus MySQL befüllen mit Filterung



## PatrickT (25. Jan 2008)

Hallo zusammen,

hab mir jetzt schon fast jeden Beitrag durchgelesen den ich durch die Suchfunktion zu diesem Thema finden konnte. Leider war noch nichts passendes dabei...

Hier mal mein Problem:
Möchte ein Einteilungsprogramm schreiben welches auf eine DB zugreift, 1.Abteilungen ausliest und 2.die entsprechende Person die zu einem bestimmten Zeitraum der Abteilung zugeteilt ist.
Mein Problem ist nun die genaue Abfrage bzw die Filterung, sodass ALLE Abteilungen angezeigt werden und nur bei denen eine Person eingeteilt ist dann auch diese Person.

Bsp:
Personalabteilung     -
Marketing                Person
Vertrieb                   Person2
Produktion               -
....

Hoffe ihr versteht was ich euch versuch zu erklären  Wäre euch sehr dankbar wenn mir jemand sagen könnte was ich falsch mache bzw wie ich die Abfrage richtig gestalten muss damit alles passt.


```
public Vector findAllDepartments() {
 
 		Vector resultDep = new Vector();
 		try {
 			Statement statement = con.createStatement();
 			ResultSet rs = statement.executeQuery(
 					"SELECT * FROM ahab_abteilungen, ahab_einteilung WHERE abteilungs_id=id");
 					
 			while (rs.next()) {
 				Vector department = new Vector();
 				department.add(rs.getString("name"));
 				department.add(rs.getString("azubi"));
//				department.add(rs.getString("tillDate"));
 				resultDep.add(department);
 			}
 
 		} catch (SQLException e) {
 			e.printStackTrace();
 		}
 
 				
 		return resultDep;
```

Danke im Voraus,
Patrick


----------



## mimo (25. Jan 2008)

Also so richtig versteh ich noch nicht was du willst. Im Moment bekommst du eine Abteilung mit der angegebenen Id. Du möchtest aber alle Abteilungen mit jeweils einer zugewiesenen Person. Geh ich da richtig in der Annahme. Da stellt sich mir erst mal die Frage wieso gliederst du die Person aus? Oder weist du den Abteilungen doch mehrere Personen zu.


----------



## PatrickT (25. Jan 2008)

Ich möchte anhand der Abfrage bzw ausgabe sehen, welche Mitarbeiter welcher Abteilung zugeteilt ist bzw. welche Abteilung noch freie Kapazitäten hat und man dort somit noch Personen zuteilen könnte...
Mit deiner Annahme liegst du richtig: ich möchte auf jeden Fall ALLE abteilungen ausgegeben haben und falls eine Abteilung einen Mitarbeiter hat diesen auch, andernfalls eben ein leeres Tabellefeld


----------



## André Uhres (25. Jan 2008)

Man könnte sich zusätzlich zu findAllDepartments eine Methode getEinteilungen machen
und dann die beiden Resultate einfach im TableModel zusammenfügen:

```
...
            Vector<Vector> v1 = findAllDepartments();
            Vector<Vector> v2 = getEinteilungen();
            int i = 0;
            int j = 0;
            while (i < v1.size()) {
                Vector abteilung = v1.get(i);
                Vector einteilung = null;
                int abt_id = (Integer) abteilung.get(0);
                int eint_id = 999999999;
                if (j < v2.size()) {
                    einteilung = v2.get(j);
                    eint_id = (Integer) einteilung.get(0);
                }
                if (abt_id < eint_id) {
                    model.addRow(new Object[]{abteilung.get(0), abteilung.get(1), 
                    null, null, null, null, null});
                } else {
                    while (j < v2.size() && abt_id == eint_id) {
                        model.addRow(new Object[]{abteilung.get(0), abteilung.get(1), 
                        einteilung.get(1),
                            einteilung.get(2), einteilung.get(3), df.format((java.util.Date) 
                            einteilung.get(4)), df.format((java.util.Date) einteilung.get(5))
                        });
                        j++;
                        if (j >= v2.size()) {
                            break;
                        }
                        einteilung = v2.get(j);
                        eint_id = (Integer) einteilung.get(0);
                    }
                }
                i++;
            }
...
    public Vector<Vector> findAllDepartments() {
        Vector resultDep = new Vector();
        Statement statement = null;
        ResultSet rs = null;
        try {
            statement = con.createStatement();
            rs = statement.executeQuery(
                    "SELECT * FROM abteilungen order by abteilungs_id");
            while (rs.next()) {
                Vector department = new Vector();
                department.add(rs.getInt("abteilungs_id"));
                department.add(rs.getString("abteilungs_bezeichnung"));
                resultDep.add(department);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            try {
                if (statement != null) {
                    statement.close();
                }
                if (rs != null) {
                    rs.close();
                }
            } catch (Exception e) {
            }
        }
        return resultDep;
    }

    public Vector<Vector> getEinteilungen() {
        Vector result = new Vector();
        Statement statement = null;
        ResultSet rs = null;
        try {
            statement = con.createStatement();
            rs = statement.executeQuery(
                    "SELECT * FROM abteilungen, einteilung where abteilungs_id = id" +
                    " order by abteilungs_id, nummer");
            while (rs.next()) {
                Vector einteilung = new Vector();
                einteilung.add(rs.getInt("id"));
                einteilung.add(rs.getInt("nummer"));
                einteilung.add(rs.getString("name"));
                einteilung.add(rs.getString("azubi"));
                einteilung.add(new java.util.Date(rs.getDate("von").getTime()));
                einteilung.add(new java.util.Date(rs.getDate("bis").getTime()));
                result.add(einteilung);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            try {
                if (statement != null) {
                    statement.close();
                }
                if (rs != null) {
                    rs.close();
                }
            } catch (Exception e) {
            }
        }
        return result;
    }
```


----------

