rawQuery(查询,selectionArgs)

Posted

技术标签:

【中文标题】rawQuery(查询,selectionArgs)【英文标题】:rawQuery(query, selectionArgs) 【发布时间】:2012-05-22 19:28:27 【问题描述】:

我想使用选择查询从表中检索数据。我发现,rawQuery(query, selectionArgs) 类的 rawQuery(query, selectionArgs) 方法可以检索数据。但是我不知道queryselectionArgs应该如何传递给rawQuery方法?

【问题讨论】:

android developer websiteAndroid 开发者是所有这些小查询的最佳来源 是所有这些小查询的最佳来源 【参考方案1】:
rawQuery("SELECT id, name FROM people WHERE name = ? AND id = ?", new String[] "David", "2");

你传递一个字符串数组,它的元素数量与你的 "?" 相同

【讨论】:

rawQuery("SELECT id, name FROM people WHERE ?= ?", new String[] "column_name", "David");,这是一个有效的查询吗? @theapache64 这不是一个有效的查询。这 '?'仅适用于值。【参考方案2】:

也许这对你有帮助

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】:

rawQuery 的一个示例 - db.rawQuery("select * from table where column = ?",new String[]"data");

【讨论】:

什么是新字符串[]"data"?你能解释一下上面的说法吗?提前致谢。 developer.android.com/reference/android/database/sqlite/…【参考方案4】:

请参阅下面的代码,它可能会对您有所帮助。

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

【讨论】:

为什么投票赞成?这没有说明如何正确使用rawQuery 提供的功能。其目的是避免连接字符串等。此外,应该接受 Rawkode 的回答。 这不是 rawQuery 应该使用的方式,你应该使用 ?作为占位符和填充它们的第二个参数。 无论您应该“如何”使用 rawQuery(),在除 Java 之外的所有其他语言中,这都是更明智、更简短、更易于理解和更标准的方式。所以这是首选。 @aMiGo 该字符串无论如何都会连接到下面的图层。 如果你连接一个字符串值,你会遇到字符 ' (字符串中需要 2 个)和字符 ; (可能会产生副作用)。假设 CustomerDbId 是一个字符串,内容为 -- '123';从客户那里删除——然后你会丢失所有数据!【参考方案5】:

如果你的 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);

【讨论】:

【参考方案6】:

为了完整性和正确的资源管理:

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

【讨论】:

【参考方案7】:
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();

姓名和家庭是你的结果

【讨论】:

以上是关于rawQuery(查询,selectionArgs)的主要内容,如果未能解决你的问题,请参考以下文章

调用database.rawQuery时的Android SQLiteMisuseException

sqlite数据库怎么进行多表连接查询,表之间有相同的字段,除了改字段名称,还有啥办法吗

Android SQLite:哪个查询(“query”或“rawQuery”)更快?

SELECT .. WHERE ... IN 在 Android 上使用 rawQuery

如何在带有 Room 的 RawQuery 中使用联接?

在 SQLiteDatabase.query() 中使用 String[] selectionArgs