# Filtern nach mehreren Kriterien



## 0001001 (15. Apr 2011)

Hallo,

stehe vor folgendem Problem:
Angenommen, es soll eine Filmdatenbank aufgebaut werden. Für jeden Film wird beispielsweise das Genre, das Jahr, die Schauspieler und das Produktionsland gespeichert. Dementsprechend hat das Datenbankschema mehrere Tabellen (bspw. eine für Genre, eine für Schauspieler, etc.). 

In meiner Anwendung soll die Datenbank nach verschiedenen Kriterien gefiltert werden können. 
Beispielsweise möchte ich mir alle Filme aus dem Genre "Drama" aus dem Jahr 2008 anzeigen lassen.

Meine Frage hierzu:
Wie setzt man das in Java am besten um?
Man möchste ja nicht für alle verschiedenen Kombinationen an Kriterien Prepared Statements schreiben müssen, also bspw.:

```
PreparedStatement s1 = "SELECT * FROM jahr NATURAL JOIN FILM NATURAL JOIN GENRE WHERE jahr.jahr = ? AND genre.bez = ?";
PreparedStatement s2 = "SELECT * FROM jahr NATURAL JOIN FILM NATURAL JOIN GENRE WHERE jahr.jahr = ?";
PreparedStatement s3 = "SELECT * FROM jahr NATURAL JOIN FILM NATURAL JOIN GENRE NATURAL JOIN ACTOR WHERE jahr.jahr = ? AND genre.bez = ? AND actor.name = ? ";
...
```

Wie macht man das üblicherweise, dass es dem Anwender möglich ist, die Datenbasis nach beliebig vielen (der X möglichen) Kriterien zu filtern?


----------



## JensArpe (15. Apr 2011)

Die Abfragen sind ja ansich nur Strings. Und die kannst du dir ja dynamisch zusammenbauen.


----------



## 0001001 (15. Apr 2011)

Ja, das wäre möglich.

Das Problem tritt IMHO in sehr vielen Anwendungen auf, daher meine Frage ob das dynamische Zusammenbauen der typischerweise gewählte Weg ist.


----------



## SlaterB (15. Apr 2011)

ist es wirklich wichtig zu wissen, wie etwas typisch gemacht wird?
wenn du selber nicht auf Varianten kommst, nirgendwo je davon gelesen hast und dir auch nicht die passenden Suchbegriffe fürs Internet einfallen,
reicht dann nicht erstmal eine beliebige einfache eigene Umsetzung?

hier noch ein Link für Hibernate
Chapter 15. Criteria Queries
als mögliche Zielrichtung,
wobei das nur die komfortable Bedienung von außen ist, intern sicher auch mit vielen if/else oder ähnlichen Bausteinen umgesetzt


----------



## Gast2 (15. Apr 2011)

Gibt da je nach RDBMS auch alternative Lösungen, z.B. für eine Oracle:
oracle - PL/SQL - Optional conditions in where-clause - without dynamic sql? - Stack Overflow


----------

