rawQuery (แบบสอบถาม selectionArgs)


88

ฉันต้องการใช้ Select Query เพื่อดึงข้อมูลจากตาราง ฉันพบrawQuery(query, selectionArgs)วิธีการของSQLiteDatabaseคลาสในการดึงข้อมูลแล้ว แต่ผมไม่ทราบว่าวิธีการqueryและselectionArgsควรได้รับการส่งผ่านไปยังrawQueryวิธี?


เว็บไซต์สำหรับนักพัฒนาแอนดรอยด์นักพัฒนาซอฟต์แวร์ Android เป็นแหล่งที่ดีที่สุดสำหรับข้อความค้นหาเล็ก ๆ เหล่านี้เป็นแหล่งที่ดีที่สุดสำหรับคำค้นหาเล็ก ๆ เหล่านี้
Tarun

คำตอบ:


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

คุณส่งสตริงอาร์เรย์ที่มีองค์ประกอบจำนวนเท่ากันตามที่คุณมี "?"


1
rawQuery("SELECT id, name FROM people WHERE ?= ?", new String[] {"column_name", "David"});นี่คือ validQuery หรือไม่
theapache64

9
@ theapache64 ไม่ใช่แบบสอบถามที่ถูกต้อง "?" ใช้ได้กับค่าเท่านั้น
BMB

16

บางทีนี่อาจช่วยคุณได้

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

ดูโค้ดด้านล่างซึ่งอาจช่วยคุณได้

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

หรือ

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

4
เหตุใดจึงมีการโหวตขึ้น rawQueryนี้ไม่ได้แสดงวิธีการใช้อย่างถูกต้องทำงานโดย วัตถุประสงค์คือเพื่อหลีกเลี่ยงการต่อสตริง ฯลฯ นอกจากนี้ควรยอมรับคำตอบของ Rawkode
aMiGo

2
นี่ไม่ใช่วิธีใช้ rawQuery คุณควรใช้? เป็นตัวยึดตำแหน่งและพารามิเตอร์ตัวที่สองเพื่อเติมเต็ม
Eduardo Naveda

4
ไม่ว่าคุณจะใช้rawQuery () "อย่างไร" นี่เป็นวิธีที่สมเหตุสมผลสั้นเข้าใจง่ายและเป็นมาตรฐานในภาษาอื่น ๆ ทั้งหมดนอกเหนือจาก Java ดังนั้นวิธีนี้จึงเป็นที่ต้องการ
not2qubit

@aMiGo สตริงจะเชื่อมต่อกับเลเยอร์ด้านล่าง
Pascalius

หากคุณเชื่อมค่าสตริงเข้าด้วยกันคุณจะมีปัญหากับอักขระ '(ต้องการ 2 ตัวในสตริง) และอักขระ (อาจสร้างผลข้างเคียง) สมมติว่า CustomerDbId เป็นสตริงที่อ่านว่า - '123'; ลบจากลูกค้า - แล้วคุณจะสูญเสียข้อมูลทั้งหมด!
Martin

2

เพื่อความสมบูรณ์และการจัดการทรัพยากรที่ถูกต้อง:

        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

หากแบบสอบถาม SQL ของคุณเป็นแบบนี้

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

จากนั้น rawQuery จะเป็น

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

ชื่อและครอบครัวคือผลลัพธ์ของคุณ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.