rawQuery (truy vấn, selectArgs)


87

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 thức của SQLiteDatabaselớp để lấy dữ liệu. Nhưng tôi không biết làm thế nào queryselectionArgsnên được chuyển cho rawQueryphương thức?


Trang web của nhà phát triển Android 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

Câu trả lời:


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

Bạn truyền vào một mảng chuỗi có số phần tử bằng "?"


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

9
@ 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

16

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


3

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

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

hoặc là

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

4
Tại sao điều này được bình chọn? Điều này không chỉ ra 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 việc nối các Chuỗi, v.v. Ngoài ra, câu trả lời của Rawkode nên được chấp nhận.
aMiGo

2
Đây không phải là cách rawQuery nên được sử dụng, bạn nên sử dụng? như placeholders và tham số thứ hai để điền vào chúng trong.
Eduardo Naveda

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

@aMiGo Dù sao thì chuỗi cũng được nối với lớp bên dưới.
Pascalius

Nếu bạn nối một giá trị chuỗi, bạn sẽ gặp vấn đề với ký tự '(cần 2 trong số chúng trong chuỗi) và ký tự; (có thể tạo ra tác dụng phụ). Giả sử CustomerDbId là một chuỗi có nội dung - '123'; xóa khỏi khách hàng - sau đó bạn sẽ mất TẤT CẢ dữ liệu!
Martin

2

Để có sự đầ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();
        }

2

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

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

thì rawQuery sẽ là

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

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

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.