SQL-Query aus Applikation dynamisch gestalten

Hallo zusammen,

wäre nett, wenn mich jemand bei folgendem Problem unterstützen könnte:

Ich möchte eine SQL-Abfrage aus einer Java-Applikation (könnte auch VB sein) an eine DB (MySQL / ORACLE) senden. In der Applikation gibt es mehrere Eingabefelder, die jedoch für die Abfrage nicht als Pflichtfeld definiert sind, d.h. der String für die Query kann eine unterschiedliche Anzahl von „where-Parametern“ enthalten; je nachdem welche Suchkriterien der Anwender eingibt.

Wie kann ich das umsetzen, ohne mit geschachtelten if-Abfragen auf meinen Quellcode unnötig aufzubauschen und Performanceverlust in kauf zu nehmen?

Bedanke mich schon jetzt für eure Hinweise (ein kleines Beispiel wäre hilfreich)

Grüße

Ratloser

Bau den SQL-String einfach dynamisch zusammen und füg bei jedem if ein Kriterium hinzu („AND x = y“)

Grüße
Bruno

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hi Ratloser,

ohne IFs wirst du nicht auskommen. Für eine Schachtelung sehe ich allerdings keinen Grund, du verlängerst halt die Where-Klausel mit jedem belegten Feld. Performance-Probleme sind bei der Übernahme von Feldinhalten aus einer Maske wohl nicht zu erwarten, da kaum ein Anwender so schnell denken kann wie ein Programm die Werte entgegennimmt.

Gruß Ralf

RE : SQL-Query aus Applikation dynamisch gestalten
Hallo zusammen,

zunächst mal vielen Dank für die Antworten.
Das mit dem dynamischen Zusammenbau verstehe ich nicht so recht. Ich habe unten mal einfach ein Beispiel (ungeschachtelt) zusammengebastelt das sich auf eine Eingabemaske mit zwei Suchfeldern (FlightDate und Persons)bezieht. Hätte ich nun 5 Eingabefelder die die Query eingrenzen könnten wäre dies eine gigantische
Anzahl von Möglichkeiten. Ziel wäre es eine Funktion zu haben, die automatisch die gefüllten Felder ermittelt und die Abfrage entsprechend zusammenstellt.

Kennt ihr vielleicht eine Möglichkeit die unten geschilderte Situation abzukürzen ?

Nochmals Dank im Voraus

Ratloser

…….
if (ivjTM3FligtDate.getText().length() > 1 && ivjTM3Persons.getText().length() 1 && ivjTM3FligtDate.getText().length() 1 && ivjTM3FligtDate.getText().length() > 1 )
{
String Query = "select … from … where persons =” + ivjTM3Persons.getText()+”and flightdate =” + ivjTM3FlightDate.getText();
….
}
……….

Mein Vorschlag:

String query = "SELECT \* FROM db WHERE 1=1 ";

if (ivjTM3FligtDate.getText().length() \> 1)
 query += "AND flightdate=” + ivjTM3FlightDate.getText();

if (ivjTM3Persons.getText().length() \> 1)
 query += "AND persons=” + ivjTM3Persons.getText();

if (xyz.getText().length() \> 1)
 query += "AND xyz=” + xyz.getText();

Als Performance-Alternative den SQL-String über StringBuffer zusammensetzen.

gruss Markus

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Markus,

ich glaub das flutscht und erspart bei mehreren Auswahlfeldern ne’ Menge Schreibarbeit.

Danke für den Tip

Grüße
Ratloser