2012-05-15 23 views
70

Tôi muốn sử dụng truy vấn chọn để truy xuất dữ liệu từ bảng. Tôi đã tìm thấy, rawQuery(query, selectionArgs) phương pháp của SQLiteDatabase lớp để truy xuất dữ liệu. Nhưng tôi không biết cách queryselectionArgs phải được chuyển đến phương thức rawQuery như thế nào?rawQuery (truy vấn, selectionArgs)

+0

[trang web nhà phát triển Android] (http://developer.android.com/reference/android/database /sqlite/SQLiteDatabase.html#rawQuery%28java.lang.String,%20java.lang.String[]%29)Nhà phát triển Android là nguồn tốt nhất cho tất cả các truy vấn nhỏ này là nguồn tốt nhất cho tất cả các truy vấn nhỏ này – Tarun

Trả lời

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

Bạn vượt qua một mảng chuỗi với một số lượng tương đương của các yếu tố như bạn có "?"

+0

Thx, xứng đáng hơn thế này cho số –

+1

này 'rawQuery (" SELECT id, tên FROM people WHERE? =? ", new String [] {" column_name "," David "});', đây có phải là một validQuery không? – theapache64

+3

@ theapache64 nó không phải là một truy vấn hợp lệ. Các '?' chỉ áp dụng cho các giá trị. – BMB

8

Một ví dụ về rawQuery - db.rawQuery("select * from table where column = ?",new String[]{"data"});

+0

Tính năng mới Chuỗi [] {"dữ liệu"}? Bạn có thể đưa ra một lời giải thích về tuyên bố trên. Cảm ơn trước. –

+0

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

1

xem mã bên dưới có thể giúp bạn.

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

hoặc

String q = "SELECT * FROM customer WHERE _id = " + customerDbId ; 
Cursor mCursor = mDb.rawQuery(q, null); 
+4

Tại sao điều này lại được bỏ phiếu? Điều này không cho thấy cách sử dụng đúng chức năng được cung cấp bởi 'rawQuery'. Mục đích của nó là để tránh concatenating Strings, vv Ngoài ra, Rawkode của câu trả lời nên được chấp nhận. – aMiGo

+2

Đây không phải là cách sử dụng rawQuery, bạn nên sử dụng? như giữ chỗ và tham số thứ hai để điền chúng vào. – Eddnav

+3

Bất kể "cách" bạn được sử dụng * rawQuery() *, đây là cách hợp lý hơn, ngắn gọn, dễ hiểu và tiêu chuẩn trong tất cả các ngôn ngữ khác, ngoài Java. Vì vậy, đây là cách ưa thích. – not2qubit

11

Có lẽ điều này có thể giúp bạn

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

đây là câu trả lời hoàn hảo cho câu hỏi được hỏi @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(); 
} 

Tên và gia đình là kết quả của bạn

0

Đối với tính đầy đủ và quản lý tài nguyên chính xác:

 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

nếu truy vấn SQL của bạn là thế này

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

sau đó rawQuery sẽ

String query="SELECT id, name FROM people WHERE name = ? AND roll = ?"; 
String[] selectionArgs = {"Amit","7"} 
db.rawQuery(query, selectionArgs); 
Các vấn đề liên quan