rawQuery(query、selectionArgs)


87

テーブルからデータを取得するためにselectクエリを使用したいと思います。データを取得するためrawQuery(query, selectionArgs)SQLiteDatabaseクラスのメソッドを見つけました。しかし、私は方法がわからないqueryselectionArgsに渡される必要があるrawQuery方法?


Android開発者のウェブサイトAndroid開発者は、これらすべての小さなクエリの最良のソースです
Tarun 2012年

回答:


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 2015年

9
@ theapache64これは有効なクエリではありません。「?」値にのみ適用されます。
BMB 2016年

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の使用方法ではなく、使用する必要がありますか?。プレースホルダと、それらを埋めるために2番目のパラメータとして
エドゥアルドNaveda

4
rawQuery()を使用する「方法」に関係なく、これはJavaを除く他のすべての言語で、より賢明で、短く、理解しやすく、標準的な方法です。したがって、これは非常に好ましい方法です。
not2qubit 2015年

@aMiGo文字列は、とにかく下のレイヤーに連結されます。
パスカリウス2015

文字列値を連結すると、文字 '(文字列に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();
}

名前と家族はあなたの結果です

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.