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

9

而不是...

public Cursor query(String table, String[] columns, String selection,
                    String[] selectionArgs, String groupBy, String having, 
                    String orderBy)

...您正在使用的方法,只需使用...

public Cursor query (boolean distinct, String table, String[] columns, 
                     String selection, String[] selectionArgs, String groupBy,
                     String having, String orderBy, String limit)

...重载并设置distincttrue.

Android 文档似乎有点难以直接链接,但描述两者的文档页面在这里

于 2013-07-23T10:12:46.597 回答
2

你可以用这个,

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

这里第一个参数用于设置 DISTINCT 值,即如果设置为 true,它将返回不同的列值。

第六个参数表示您想要的列名GROUP BY

于 2013-07-23T10:18:44.937 回答
1

您应该使用另一个 QUERY 函数,并将第一个 DISTINCT 布尔参数设置为 TRUE

公共游标查询(布尔不同,字符串表,...)

于 2013-07-23T10:13:53.517 回答
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 回答