2010-12-11 13 views
0

In meinem Suchmodul verwende ich SQLite-Datenbank. Manchmal suche ich mehr als zwei Werte. Also verwende ich AND Bedingung und manchmal nur einen Wert zu suchen. Diese beiden Fälle muss ich in einer einzigen Abfrage implementieren. Bitte hilf mir.Wie löst man alle in einer Abfrage?

Dies ist die Abfrage:

Cursor dbcur = myDB.rawQuery("select * from "+dbtable+" where Status='"+item+"'AND ball_court='"+ball+"'AND Tovendor='"+vendor+"'", null); 

Manchmal status und ball_court Ich suche, tovendor und manchmal status nur ich bin auf der Suche. Wie man dieses Problem löst?

+0

Hinweis: Sie können Zeilen als Code formatieren, indem sie vier Leerzeichen einrücken. Die Schaltfläche "101 \ n010" in der Editor-Symbolleiste erledigt dies für Sie. Klicken Sie auf das orangefarbene Fragezeichen in der Editor-Symbolleiste, um weitere Informationen und Tipps zum Formatieren zu erhalten. – outis

Antwort

0

Erstellen Sie die Abfragezeichenfolge in Stufen und nicht auf einmal. Wenn Sie immer gegen den Status auswählen möchten, stellen Sie dies in die WHERE-Klausel und fügen Sie dann weitere Ausdrücke hinzu. Verwenden Sie Parameter (die Sie mit SQLiteDatabase.query ausführen können), anstatt Werte in die Abfrage selbst zu verketten, um eine SQL-Injektion zu verhindern. dbtable besser nicht von nicht vertrauenswürdigen Quellen kommen (z. B. Benutzer, die Datenbank selbst). Mein Java ist ein wenig rostig, aber versuchen, so etwas wie das Start folgendes:

List<String> argList = new LinkedList<String>(); 

String selection = "Status=?"; 
argList.add(item); 
if (ball != null && ball.length()) { 
    selection += " AND ball_court=?"; 
    argList.add(ball); 
} 
if (vendor != null && vendor.length()) { 
    selection += " AND Tovendor=?"; 
    argList.add(vendor); 
} 

String[] argArray = new String[argList.length()]; 
argList.toArray(argArray); 
// columns is a String[] of column names 
Cursor dbcur = myDB.query(false, dbtable, columns, selection, argArray, null, null, null); 

Anstatt Strings anhängt, könnte man ein StringBuilder verwenden möchten.

Was SELECT * lesen „What is the reason not to use SELECT *?

-1

Sie können möglicherweise einige Antworten erhalten, wenn Sie eine Beispielabfrage sowie das, wonach Sie suchen könnten, veröffentlichen! Ich habe deine Frage nicht ganz verstanden, da ich helfen könnte/sollte.

+0

Cursor dbcur = myDB.rawQuery ("wählen * von" + dbtable + "where Status = '" + item + "' UND ball_court = '" + ball + "' UND Tovendor = '" + vendor + "'", null); .. ............ Dies ist meine Abfrage.Seinmal suche ich Status und ball_court, tovendor und einige ich suche nur Status.Wie dieses Problem zu lösen ....... Hilf mir. ........ – user533787

+0

@ user538689: Sie wurden wahrscheinlich downvoted, da Ihre Antwort die Frage nicht wirklich beantwortet. Normalerweise sollte dein Beitrag ein Kommentar sein, aber du brauchst mindestens 50 Wiederholer, um Kommentare zu den Fragen anderer zu schreiben. Zum downvoter: user538689's "answer" sollte ein Kommentar sein, aber user538689 kann keine Kommentare posten. – outis