2014-12-01 13 views
6

Sto lavorando ad un'applicazione Android che utilizza SQLite come memoria locale. Ho bisogno di utilizzare i parametri nella query SQL, ma tutti gli esempi che ho trovato contengono parametri Unamed, in questo modo:SQLite Android - parametri con nome

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

Mi chiedo - si fa SQLite Android supporta parametri denominati? Qualcosa di simile a questo, invece di punti interrogativi ..

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

SQLite per sé supporta questa (in base alla documentazione https://www.sqlite.org/lang_expr.html).

Grazie in anticipo

+2

se si dà un'occhiata alla documentazione per le classi relative a SQL, per quanto posso dire, i metodi di associazione di query sono tutti basati su indici. – njzk2

risposta

5

L'API database di Android permette vincolante parametro solo in base all'indice.

Ciò non impedisce l'utilizzo di parametri denominati in SQL, ma è comunque necessario utilizzare l'indice corretto per collegarli. Questo è praticamente inutile, fatta eccezione per la documentazione, o per il riutilizzo di un parametro:

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

Francamente, sono un po 'sorpreso dal momento che anche la documentazione di SQLite sconsiglia di utilizzare i parametri vincolanti per indice. Comunque, grazie per la risposta. –

+2

L'API del database Android contiene molti strani strani. (La cosa peggiore è che tutte le funzioni * tranne * 'execSQL' supportano solo i parametri' String'). –

1

Un modo specifico più Android SQLite è quello di utilizzare un contentValues ​​per l'inserimento di sql. Nell'esempio qui sotto. valori è un ContentValues ​​e contiene il nome della colonna e il valore per la colonna. Le colonne non presenti in ContentValues ​​sono impostate sul loro valore predefinito sull'inserto.

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