2012-05-15 6 views
70

Ich möchte Select-Abfrage zum Abrufen von Daten aus der Tabelle verwenden. Ich habe rawQuery(query, selectionArgs) Methode der SQLiteDatabase Klasse gefunden, um Daten abzurufen. Aber ich weiß nicht, wie die query und selectionArgs an rawQuery Methode weitergegeben werden sollte?rawQuery (query, selectionArgs)

+0

[Android-Entwickler-Website] (http://developer.android.com/reference/android/database /sqlite/SQLiteDatabase.html#rawQuery%28java.lang.String,%20java.lang.String[]%29)Android-Entwickler ist die beste Quelle für all diese kleinen Abfragen ist die beste Quelle für all diese kleinen Abfragen – Tarun

Antwort

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

Sie übergeben einen String-Array mit einer gleichen Anzahl von Elementen wie Sie haben "?"

+0

Thx, verdienen mehr wie für diese –

+1

'rawQuery (" SELECT id, Name FROM people WHERE? =? ", neuer String [] {" column_name "," David "})' ', ist das eine validQuery? – theapache64

+3

@ theapache64 es ist keine gültige Abfrage. Das '?' gilt nur für Werte. – BMB

8

Ein Beispiel für rawQuery - db.rawQuery("select * from table where column = ?",new String[]{"data"});

+0

Was ist neu Zeichenfolge [] {"Daten"}? Können Sie nur eine Erklärung der obigen Aussage geben? Danke im Voraus. –

+0

http://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html#rawQuery%28java.lang.String,%20java.lang.String[]%29 – Tarun

1

siehe unten Code kann es 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); 
+4

Warum wird das abgestimmt? Dies zeigt nicht, wie die Funktionalität von 'rawQuery' richtig verwendet wird. Sein Zweck ist es, die Verkettung von Strings usw. zu vermeiden. Auch Rawkodes Antwort sollte 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. – Eddnav

+3

Unabhängig davon, wie Sie * rawQuery() * verwenden sollen, ist dies der vernünftigere, kürzere, verständlichste und standardmäßige Weg in allen anderen Sprachen außer Java. Dies ist also bevorzugt. – not2qubit

11

Vielleicht kann dies helfen Ihnen

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(); 
} 
+0

das ist die perfekte Antwort auf die Frage @AgentKnopf –

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

0

Für Vollständigkeit und korrekte Ressourcenmanagement:

 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(); 
     } 
0

, wenn Ihre SQL-Abfrage ist dies

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

dann rawQuery sein

String query="SELECT id, name FROM people WHERE name = ? AND roll = ?"; 
String[] selectionArgs = {"Amit","7"} 
db.rawQuery(query, selectionArgs);