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;
Dennie
quelle
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);
Prashast
quelle
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);
Xiojason
quelle
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
        }
Gautam Mandsorwale
quelle
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
Suragch
quelle
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);
Styling
quelle