# Größer - Kleiner - Zeichen in Strings



## C_A (2. Sep 2009)

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": 
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": 

```
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;
    }
```


----------



## Landei (2. Sep 2009)

Was soll das sein: (Auftragsart = Item 1) ???


----------



## Michael... (2. Sep 2009)

Florian_ hat gesagt.:


> 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


Wenn es eine Auftragsart *Item 1* gibt, dann muss es 
	
	
	
	





```
(Auftragsart = 'Item 1')
```
 heißen.


----------



## C_A (6. Sep 2009)

Michael... hat gesagt.:


> Wenn es eine Auftragsart *Item 1* gibt, dann muss es
> 
> 
> 
> ...



Okay, das war der Klaps auf den Hinterkopf ;-) 

Danke! 

Ich war grad etwas betriebsblind ;-)


----------

