SQLite
 sql >> Baza danych >  >> RDS >> SQLite

Usunąć wiele wierszy przy użyciu identyfikatorów?

Gdy podasz pojedynczy ciąg jako whereArgs , pojedynczy ciąg kończy się w poleceniu SQL, tak jakbyś napisał to:

... WHERE _id IN ('1,2,42')

Porównałoby to każdy _id wartość względem wartości '1,2,42' , co oczywiście nie działa.

Jeśli użyjesz trzech znaczników parametrów i podasz trzy ciągi w whereArgs tablicę, otrzymasz trzy ciągi, tak:

... WHERE _id in ('1','2','42')

Działa to tylko wtedy, gdy _id kolumna ma powinowactwo do liczb całkowitych, co jest prawdziwe dla kolumny zadeklarowanej jako INTEGER PRIMARY KEY, ale nie w ogólnym przypadku.

Interfejs API bazy danych systemu Android nie zezwala na to, aby parametry zapytania miały jakikolwiek typ oprócz ciągu.W przypadku używania liczb całkowitych należy je po prostu wstawić bezpośrednio (jak w odpowiedzi ianhanniballake):

String whereClause = getIdColumn() + " IN (" + TextUtils.join(",", ids) + ")";


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak zaimplementować SQLCipher podczas korzystania z SQLiteOpenHelper

  2. Symbole wieloznaczne Androida SQLite

  3. SQLiteStatement wykonuje SELECT / INSERT / DELETE / UPDATE

  4. ListView z Sqlite w Androidzie

  5. Uzyskaj pozycję znaku w ciągu w SQLite za pomocą Instr()