rawQuery (Abfrage, AuswahlArgs)

86

Ich möchte die Auswahlabfrage zum Abrufen von Daten aus der Tabelle verwenden. Ich habe eine rawQuery(query, selectionArgs)Methode der SQLiteDatabaseKlasse gefunden, um Daten abzurufen. Aber ich weiß nicht, wie das queryund selectionArgsan die rawQueryMethode übergeben werden soll?

sree_iphonedev
quelle
Android-Entwickler-Website Android-Entwickler ist die beste Quelle für all diese kleinen Abfragen ist die beste Quelle für all diese kleinen Abfragen
Tarun

Antworten:

220
rawQuery("SELECT id, name FROM people WHERE name = ? AND id = ?", new String[] {"David", "2"});

Sie übergeben ein String-Array mit der gleichen Anzahl von Elementen wie "?"

Rawkode
quelle
1
rawQuery("SELECT id, name FROM people WHERE ?= ?", new String[] {"column_name", "David"});Ist das eine validQuery?
Theapache64
8
@ theapache64 es ist keine gültige Abfrage. Das '?' gilt nur für Werte.
BMB
15

Vielleicht kann dir das helfen

Cursor c = db.rawQuery("query",null);
int id[] = new int[c.getCount()];
int i = 0;
if (c.getCount() > 0) 
{               
    c.moveToFirst();
    do {
        id[i] = c.getInt(c.getColumnIndex("field_name"));
        i++;
    } while (c.moveToNext());
    c.close();
}
user1208720
quelle
3

siehe unten Code es kann Ihnen helfen.

String q = "SELECT * FROM customer";
Cursor mCursor = mDb.rawQuery(q, null);

oder

String q = "SELECT * FROM customer WHERE _id = " + customerDbId  ;
Cursor mCursor = mDb.rawQuery(q, null);
Dhaval Parmar
quelle
4
Warum wird das hochgestimmt? Dies zeigt nicht, wie die von bereitgestellten Funktionen ordnungsgemäß verwendet werden rawQuery. Ihr Zweck ist es, das Verketten von Strings usw. zu vermeiden. Außerdem sollte die Antwort von Rawkode akzeptiert werden.
AMiGo
2
Dies ist nicht, wie rawQuery verwendet werden sollte, sollten Sie verwenden? als Platzhalter und der zweite Parameter, um sie auszufüllen.
Eduardo Naveda
4
Unabhängig davon, wie Sie rawQuery () verwenden sollen , ist DIES in allen anderen Sprachen außer Java die sinnvollere, kürzere, verständlichere und standardisiertere Methode. Das ist also sehr bevorzugt.
not2qubit
@aMiGo Die Zeichenfolge wird ohnehin mit der darunter liegenden Ebene verkettet.
Pascalius
Wenn Sie einen Zeichenfolgenwert verketten, treten Probleme mit dem Zeichen '(benötigt 2 davon in der Zeichenfolge) und dem Zeichen auf. (Kann Nebenwirkungen verursachen). Angenommen, CustomerDbId ist eine Zeichenfolge mit der Aufschrift '123'. vom Kunden löschen - dann würden Sie ALLE Daten verlieren!
Martin
2

Für die Vollständigkeit und korrekte Ressourcenverwaltung:

        ICursor cursor = null;
        try
        {

            cursor = db.RawQuery("SELECT * FROM " + RECORDS_TABLE + " WHERE " + RECORD_ID + "=?", new String[] { id + "" });

            if (cursor.Count > 0)
            {
                cursor.MoveToFirst();
            }
            return GetRecordFromCursor(cursor); // Copy cursor props to custom obj
        }
        finally // IMPORTANT !!! Ensure cursor is not left hanging around ...
        {
            if(cursor != null)
                cursor.Close();
        }
Komm herein
quelle
2

Wenn Ihre SQL-Abfrage dies ist

SELECT id,name,roll FROM student WHERE name='Amit' AND roll='7'

dann wird rawQuery sein

String query="SELECT id, name, roll FROM student WHERE name = ? AND roll = ?";
String[] selectionArgs = {"Amit","7"} 
db.rawQuery(query, selectionArgs);
Puneet Verma
quelle
0
String mQuery = "SELECT Name,Family From tblName";
Cursor mCur = db.rawQuery(mQuery, new String[]{});
mCur.moveToFirst();
while ( !mCur.isAfterLast()) {
        String name= mCur.getString(mCur.getColumnIndex("Name"));
        String family= mCur.getString(mCur.getColumnIndex("Family"));
        mCur.moveToNext();
}

Name und Familie sind Ihr Ergebnis

faeze saghafi
quelle