rawQuery(query,selectionArgs)


87

我想使用选择查询从表中检索数据。我已经找到了检索数据rawQuery(query, selectionArgs)SQLiteDatabase类方法。但是我不知道queryandselectionArgs应该如何传递给rawQuery方法?


Android开发人员网站Android开发人员是所有这些小查询的最佳来源,也是所有这些小查询的最佳来源
Tarun 2012年

Answers:


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"});,这是有效查询吗?
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 2013年

2
这不是应使用rawQuery的方式,应该使用?占位符,第二个参数,以填补他们进来
爱德华Naveda

4
无论您应该如何使用rawQuery(),在Java之外的所有其他语言中,THIS都是更明智,更简短,更易理解和更标准的方式。因此,这是首选方法。
not2qubit 2015年

@aMiGo无论如何,该字符串都连接在下面的层中。
Pascalius

如果连接字符串值,则会遇到字符'(在字符串中需要2个字符)和字符; (可能会产生副作用)。假设CustomerDbId是一个读为-'123'; 从客户删除-那么您将丢失所有数据!
马丁

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

名字和家人是你的结果

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.