2014-12-01 15 views
6

Ich arbeite an Android-Anwendung, die SQLite als lokalen Speicher verwendet. Ich brauche Parameter in SQL-Abfrage zu verwenden, aber alle Beispiele, die ich gefunden habe, enthalten unamed Parameter, etwa so:Android SQLite - benannte Parameter

INSERT INTO SomeTable(ColA, ColB, ColC) VALUES (?,?,?); 

Ich frage mich - nicht SQLite auf Android unterstützt Parameter benannt? So etwas wie dies anstelle von Fragezeichen ..

INSERT INTO SomeTable(ColA, ColB, ColC) VALUES (@paramA, @paramB, @paramC); 

SQLite selbst unterstützt dies (nach der Dokumentation https://www.sqlite.org/lang_expr.html).

Vielen Dank im Voraus

+2

Wenn Sie sich die Dokumentation für die SQL-bezogenen Klassen ansehen, so weit ich sagen kann, sind die Abfrage-Bindungsmethoden alle Index-basiert. – njzk2

Antwort

5

Der Android-Datenbank-API erlaubt nur durch Indexparameter zu binden.

Dies hindert Sie nicht daran, benannte Parameter in SQL zu verwenden, aber Sie müssen immer noch den richtigen Index verwenden, um sie zu binden. Das ist ziemlich nutzlos, mit Ausnahme der Dokumentation oder für die Wiederverwendung eines Parameters:

db.rawQuery("SELECT * FROM Tab WHERE A = @search OR B = @search", 
      new String[]{ search }); 
+2

Ehrlich gesagt bin ich etwas überrascht, da selbst die SQLite-Dokumentation davon abhält, Parameter zu verwenden, die nach Index binden. Wie auch immer, danke für die Antwort. –

+2

Die Android-Datenbank API enthält viele seltsame Macken. (Am schlimmsten ist, dass alle Funktionen * außer * 'execSQL' nur' String'-Parameter unterstützen). –

1

Eine android SQLite spezifische Art und Weise ist ein content für SQL-Insert zu verwenden. Im folgenden Beispiel. values ​​ist ein ContentValues ​​und enthält den Spaltennamen und den Wert für die Spalte. Spalten, die nicht in den ContentValues ​​enthalten sind, werden beim Einfügen auf ihren Standardwert gesetzt.