Wie führe ich eine SQLite-Abfrage in einer Android-Anwendung durch?


68

Ich versuche, diese Abfrage für meine Android-Datenbank zu verwenden, sie gibt jedoch keine Daten zurück. Vermisse ich etwas

SQLiteDatabase db = mDbHelper.getReadableDatabase();
    String select = "Select _id, title, title_raw from search Where(title_raw like " + "'%Smith%'" +
    ")";        
    Cursor cursor = db.query(TABLE_NAME, FROM, 
            select, null, null, null, null);
    startManagingCursor(cursor);
    return cursor;

Versuchen Sie dies für Ihre korrekte Abfrage. stackoverflow.com/a/17925238/6125132
Faruk Ahmed

Antworten:


111

Dies gibt Ihnen den gewünschten Cursor zurück

Cursor cursor = db.query(TABLE_NAME, new String[] {"_id", "title", "title_raw"}, 
                "title_raw like " + "'%Smith%'", null, null, null, null);

3
Bestehen Sie nur, nullwenn Sie möchten, dass die whereBedingung "alles" ist?
Matt Huggins

2
@ Matt: Ja, einfach null für nein wo caluse übergeben
Noah

Um das Caching zu verbessern, können Sie Auswahl und Auswahlargumente wie folgt trennen : ..., "title_raw like ?", new String[]{"'%Smith%'"}, .... Quelle: Android-Dokumentation .
Sulai

@sulai Wo ist die Verbindung zwischen SQLiteDatabase und ContentResolver? Der Link zu SQLite lautet: developer.android.com/reference/android/database/sqlite/… Dort sagen sie nichts über Caching. Ich denke, separate Argumente sollten gegen SQL-Injection verwendet werden. Ansonsten sind sie nicht sehr wichtig, denke ich.
Der unglaubliche

57

Alternativ existiert db.rawQuery (sql, selectionArgs).

Cursor c = db.rawQuery(select, null);

27

Dies funktioniert auch, wenn das Muster, mit dem Sie übereinstimmen möchten, eine Variable ist.

dbh = new DbHelper(this);
        SQLiteDatabase db = dbh.getWritableDatabase();
        Cursor c = db.query("TableName", new String[]{"ColumnName"}
        , "ColumnName LIKE ?" ,new String[]{_data+"%"}, null, null, null);
        while(c.moveToNext())
        {
            // your calculation goes here
        }

12

Ich kam hierher, um mich daran zu erinnern, wie die Abfrage eingerichtet wird, aber die vorhandenen Beispiele waren schwer zu befolgen. Hier ist ein Beispiel mit mehr Erklärung.

SQLiteDatabase db = helper.getReadableDatabase();

String table = "table2";
String[] columns = {"column1", "column3"};
String selection = "column3 =?";
String[] selectionArgs = {"apple"};
String groupBy = null;
String having = null;
String orderBy = "column3 DESC";
String limit = "10";

Cursor cursor = db.query(table, columns, selection, selectionArgs, groupBy, having, orderBy, limit);

Parameter

  • table: Der Name der Tabelle, die Sie abfragen möchten
  • columns: Die Spaltennamen, die zurückgegeben werden sollen. Geben Sie keine Daten zurück, die Sie nicht benötigen.
  • selection: Die Zeilendaten, die von den Spalten zurückgegeben werden sollen (Dies ist die WHERE-Klausel.)
  • selectionArgs: Dies wird ?in der selectionobigen Zeichenfolge ersetzt.
  • groupByund having: Diese Gruppe gruppiert doppelte Daten in einer Spalte mit Daten mit bestimmten Bedingungen. Nicht benötigte Parameter können auf null gesetzt werden.
  • orderBy: sortiere die Daten
  • limit: Begrenzen Sie die Anzahl der zurückzugebenden Ergebnisse

1

Versuchen Sie dies, dies funktioniert für meinen Codenamen ist ein String:

cursor = rdb.query(true, TABLE_PROFILE, new String[] { ID,
    REMOTEID, FIRSTNAME, LASTNAME, EMAIL, GENDER, AGE, DOB,
    ROLEID, NATIONALID, URL, IMAGEURL },                    
    LASTNAME + " like ?", new String[]{ name+"%" }, null, null, null, null);
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.