4

より複雑な SQL クエリを作成する場合の SQLite での query() と rawQuery() の違い。

例えば

SQL キーワード DISTINCT を使用したいので、データベースから重複が返されません。rawQuery() メソッドの使用方法を理解しています。これにより、実際の SQL クエリ ステートメントをメソッドに入れることができます。このようにして、rawQuery を使用して標準の SQL ステートメントを作成できます。rawQuery() を使用すると、DISTINCT キーワードを任意の SQL ステートメントに簡単に追加できます。

ただし、このコードで示されているように query() メソッドを使用する場合、通常の SQL ステートメントだけを使用することはできません。この場合、クエリの一部として DISTINCT キーワードを使用してクエリを作成するにはどうすればよいでしょうか? または同じ機能を持つ何か?

            // get info from country table
            public String[] getCountries(int numberOfRows) {

                     String[] columns = new String[]{COUNTRY_NAME};
                     String[] countries = new String[numberOfRows];

                     int counter = 0;

                Cursor cursor = sqLiteDatabase.query(COUNTRY_TABLE, columns, 
                            null, null, null, null, null);

                     if (cursor != null){

                     while(cursor.moveToNext()){
         countries[counter++] = cursor.getString(cursor.getColumnIndex(COUNTRY_NAME));                                   
                    }

            }
                return countries;                        
     }
4

4 に答える 4

2

あなたはこれを使うことができます、

Cursor cursor = db.query(true, YOUR_TABLE_NAME, new String[] { COLUMN1 ,COLUMN2, COLUMN_NAME_3 }, null, null, COLUMN2, null, null, null);

ここでは、最初のパラメータを使用して DISTINCT 値を設定します。つまり、true に設定すると、個別の列値が返されます。

6番目のパラメータは、必要な列名を示しますGROUP BY

于 2013-07-23T10:18:44.937 に答える
0

これは、グループテーブルから個別の名前を取得するためにアプリで使用した関数です。アイデアが得られることを願っています。見てください。列に同じ名前が含まれている場合、個別の値のみがフェッチされます

public ArrayList<String> getGroupNames() {

    ArrayList<String> groups = new ArrayList<>();

    SQLiteDatabase db = this.getReadableDatabase();

    String[] projection = {COLUMN_GROUP_NAME};

    //select distinct values for group name from group table

    Cursor cursor = db.query(true,GROUPS_TABLE_NAME, projection, null, null, COLUMN_GROUP_NAME, null, null,null);

    if (cursor.moveToFirst()) {

        do {
            String group=cursor.getString(cursor.getColumnIndexOrThrow(COLUMN_GROUP_NAME));
            groups.add(group);
            Log.d("group",group+"gp");

        }while (cursor.moveToNext());

    }
    return groups;

}
于 2015-08-11T09:06:19.843 に答える