C
C_A
Gast
Hallo!
Ich versuche gerade, einen SQL-Generator zu programmieren. Ziel: der User soll die Möglichkeit haben, mit comboboxen sich "sein SQL" zusammenzuklicken. Um die Idee deutlicher zu zeigen, hänge ich einen Screenshot an.
In der mittleren Combobox ist u. a. der Wert "größer als" enthalten. Also: User klickt auf erste Combobox und wählt dort "Status", in der mittleren wählt er "größer als" und in der dritten cmbBox (ganz recht) wählt er Werte, die ich vorher mit einem "select distinct" aus der DB geholt habe.
Es soll also folgender SQL generiert werden:
"select * from Auftrag where Status > 2"
Das Prinzip funktioniert ganz gut, wenn ich nicht anfange, auf Gleichheitszeichen, Größer- oder KleinerZeichen zu prüfen. Dann wird mir die Meldung zurückgegeben, "rechte Klammer":
Fehlermeldung: java.sql.SQLException: ORA-00907: Rechte Klammer fehlt
Könnt Ihr nachvollziehen, was da nicht stimmt?
Dem ganzen liegt folgender Code zugrunde, wobei cmbXXX = Combobox XXX, edtXXX = Editfeld (= Textfeld), chkXXX = Checkbox etc. "gleich", "ungleich" etc. sind Strings, die ich weiter oben definiert habe als "ist gleich":
Ich versuche gerade, einen SQL-Generator zu programmieren. Ziel: der User soll die Möglichkeit haben, mit comboboxen sich "sein SQL" zusammenzuklicken. Um die Idee deutlicher zu zeigen, hänge ich einen Screenshot an.
In der mittleren Combobox ist u. a. der Wert "größer als" enthalten. Also: User klickt auf erste Combobox und wählt dort "Status", in der mittleren wählt er "größer als" und in der dritten cmbBox (ganz recht) wählt er Werte, die ich vorher mit einem "select distinct" aus der DB geholt habe.
Es soll also folgender SQL generiert werden:
"select * from Auftrag where Status > 2"
Das Prinzip funktioniert ganz gut, wenn ich nicht anfange, auf Gleichheitszeichen, Größer- oder KleinerZeichen zu prüfen. Dann wird mir die Meldung zurückgegeben, "rechte Klammer":
funktioniert: Select ID, Schlagwort from Auftrag where (1 = 1) and (Schlagwort not like '%Bitte Suchtext eingeben%')
funktioniert nicht: Select ID, Schlagwort from Auftrag where (1 = 1) and (Auftragsart = Item 1) and (Schlagwort not like '%Bitte Suchtext eingeben%')Fehlermeldung: java.sql.SQLException: ORA-00907: Rechte Klammer fehlt
Könnt Ihr nachvollziehen, was da nicht stimmt?
Dem ganzen liegt folgender Code zugrunde, wobei cmbXXX = Combobox XXX, edtXXX = Editfeld (= Textfeld), chkXXX = Checkbox etc. "gleich", "ungleich" etc. sind Strings, die ich weiter oben definiert habe als "ist gleich":
Java:
private String AuswahlSQL()
{
String Zwischenwert = new String();
String Wert = new String();
Wert = "Select " + edtFelder.getText() + " from Auftrag where (1 = 1)";
if(chkBed_1.isSelected())
{
Zwischenwert = (String)cmbBed_1.getSelectedItem();
Wert = Wert + " and (" + (String)cmbKrit_1.getSelectedItem();
if (Zwischenwert.equals(gleich))
{
Wert = Wert + " = ";
}
else
if (Zwischenwert.equals(ungleich))
{
Wert = Wert + " <> ";
}
Wert = Wert + (String)cmbWerte_1.getSelectedItem() + ")";
}
if (chkBed_2.isSelected())
{
Zwischenwert = (String)cmbBed_2.getSelectedItem();
Wert = Wert + " and (" + (String)cmbKrit_2.getSelectedItem();
if (Zwischenwert.equals(gleich))
{
Wert = Wert + " = ";
}
else if (Zwischenwert.equals(ungleich))
{
Wert = Wert + " <> ";
}
else if (Zwischenwert.equals(mindestens))
{
Wert = Wert + " >= ";
}
else if (Zwischenwert.equals(höchstens))
{
Wert = Wert + " <= ";
}
Wert = Wert + (String)cmbWerte_2.getSelectedItem() + ")";
}
if (chkBed_3.isSelected())
{
Zwischenwert = (String)cmbBed_3.getSelectedItem();
Wert = Wert + " and (Schlagwort ";
if(Zwischenwert.equals(gleich))
{
Wert = Wert + " like ";
}
else if (Zwischenwert.equals(ungleich))
{
Wert = Wert + " not like ";
}
Wert = Wert + " '%" + edtSuchtext.getText() + "%'" + ")";
}
return Wert;
}