2014-12-01 6 views
6

Pracuję nad aplikacją dla systemu Android, która korzysta z SQLite jako magazynu lokalnego. Muszę używać parametrów w zapytaniu SQL, ale wszystkie przykłady znalazłem zawierać parametry unamed, tak:Android SQLite - o nazwanych parametrach

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

zastanawiam - czy SQLite na Androida obsługuje nazwane parametry? Coś takiego zamiast znaków zapytania .. Sam

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

SQLite obsługuje to (zgodnie z dokumentacją https://www.sqlite.org/lang_expr.html).

góry dzięki

+2

Jeśli przyjrzeć się dokumentacji klas związanych z SQL, o ile mogę powiedzieć, metody wiążące zapytanie są oparte na indeksie. – njzk2

Odpowiedz

5

Android API bazy danych umożliwia parametr obowiązywała tylko przez indeks.

To nie przeszkadza w używaniu nazwanych parametrów w SQL, ale nadal musisz użyć poprawnego indeksu, aby je powiązać. To jest dość dużo bezużyteczny, z wyjątkiem dokumentacji, lub ponowne parametr:

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

Szczerze mówiąc, jestem nieco zaskoczony, ponieważ nawet dokumentacja SQLite zniechęca do używania parametrów wiążących indeks. W każdym razie, dziękuję za odpowiedź. –

+2

Interfejs API bazy danych Androida zawiera wiele dziwnych dziwactw. (Najgorsze jest to, że wszystkie funkcje * z wyjątkiem * 'execSQL' obsługują tylko parametry' String'). –

1

Bardziej specyficzny sposób android SQLite jest użycie ContentValues ​​na wkładce SQL. W poniższym przykładzie. wartości to ContentValues ​​i zawiera nazwę kolumny oraz wartość kolumny. Kolumny spoza ContentValues ​​są ustawione na ich wartość domyślną na insert.

  id = sqlDB.insertOrThrow(RidesDatabaseHandler.TABLE_RIDES, 
        null, values);