Android SQLiteException: Binde- oder Spaltenindex außerhalb des Bereichs Problem

In android verwende ich die folgende Aussage.

model = dataHelper.rawQuery("SELECT _id, engword, lower(engword) as letter FROM word WHERE letter >= 'a' AND letter < '{' AND engword LIKE '%" + filterText + "%'", new String[ {"_id","engword", "lower(engword) as letter"}); 

Es wirft android.database.sqlite.SQLiteException: bind or column index out of range: handle 0x132330

  • Warum sind meine Fragmente onSaveInstanceState () nicht aufgerufen?
  • Wie zu verhindern, dass Android-App aus Crashing aufgrund von Ausnahme im Hintergrund-Thread?
  • Android dialogFragment "manchmal" nicht anzeigen webview
  • Android Singletop Singleinstanz und Singletask
  • So erkennen Sie Systeminformationen wie os oder Gerätetyp
  • CollapsingToolbarLayout setTitle () funktioniert nicht mehr
  • Was ist das Problem in meinem Code?

  • Android-Anwendung basierend auf einzelne Aktivität, mehrere Fragmente
  • Was ist der Unterschied in den Kontakten gegenüber den Rohkontakten?
  • Wie behalte meine Klasse von der Vorwürfe
  • Android-Anwendung schließen
  • GetUidRxBytes () und getUidTxBytes () immer 0 in Android 4.3 zurückgeben
  • Android - Proguard kompiliert nicht mit Joda Time jar Datei
  • 3 Solutions collect form web for “Android SQLiteException: Binde- oder Spaltenindex außerhalb des Bereichs Problem”

    Die richtige Aussage ist:

     model = dataHelper.rawQuery(" SELECT _id, engword, lower(engword) as letter FROM word W HERE letter >= 'a' AND letter < '{' AND engword LIKE ? ORDER BY engword ASC ", new String[] {"%" + filterText + "%"} ); 

    Sie haben 3 Parameter, aber Sie haben keine ? In deiner abfrage Pass null statt String-Array als das 2. Argument an die rawQuery oder ersetzen _id , engword und lower(engword) as letter in deiner Auswahl String durch ?

    1)

     model = dataHelper.rawQuery("SELECT ?, ?, ? FROM word WHERE letter >= 'a' AND letter < '{' AND engword LIKE '%" + filterText + "%'",new String[] {"_id","engword", "lower(engword) as letter"}); 

    2)

     model = dataHelper.rawQuery("SELECT _id, engword, lower(engword) as letter FROM word WHERE letter >= 'a' AND letter < '{' AND engword LIKE '%" + filterText + "%'", null); 

    Bearbeiten: Wie @Ewoks darauf hingewiesen hat, ist die Option (1) falsch, da vorbereitete Anweisungen Parameter (? S) nur in WHERE-Klausel erhalten können.

    Wenn jemand wie ich es versuche (und versäumt), diese Arbeit mit getContentResolver().query zu bekommen, getContentResolver().query , wie ich es geschafft habe:

    * Aktualisiert dank Kommentare von @CL und @Wolfram Rittmeyer, wie sie sagten, das ist das gleiche wie für rawQuery *

    Der richtige Weg:

      public static String SELECTION_LIKE_EMP_NAME = Columns.EMPLOYEE_NAME + " like ?"; Cursor c = context.getContentResolver().query(contentUri, PROJECTION, SELECTION_LIKE_EMP_NAME, new String[] { "%" + query + "%" }, null); 

    Vorherige Antwort, die offen für SQL-Injection-Angriff war:

     public static String SELECTION_LIKE_EMP_NAME = Columns.EMPLOYEE_NAME + " like '%?%'"; String selection = SELECTION_LIKE_EMP_NAME.replace("?", query); Cursor c = context.getContentResolver().query(contentUri, PROJECTION, selection, null, null); 
    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.