Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/190.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Android中使用SQLite向query()添加不同的关键字_Android_Sql_Database_Sqlite - Fatal编程技术网

在Android中使用SQLite向query()添加不同的关键字

在Android中使用SQLite向query()添加不同的关键字,android,sql,database,sqlite,Android,Sql,Database,Sqlite,在进行更复杂的SQL查询时,SQLite中query()和rawQuery()之间的区别 比如说 我想使用SQL关键字DISTINCT,这样就不会从数据库中返回任何重复项。 我了解如何使用rawQuery()方法,这样您就可以在方法中放入实际的SQL查询语句。通过这种方式,我可以用rawQuery生成一个标准的SQL语句。在使用rawQuery()时,将DISTINCT关键字添加到任何SQL语句都很容易 但是,当使用本文所示的query()方法时,我不能只使用常规SQL语句。在这种情况下,如何使

在进行更复杂的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;                        
     }
而不是

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)
…重载并将
distinct
设置为
true


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

您应该使用另一个查询函数,将第一个不同的布尔参数设置为TRUE

你可以用这个

Cursor cursor = db.query(true, YOUR_TABLE_NAME, new String[] { COLUMN1 ,COLUMN2, COLUMN_NAME_3 }, null, null, COLUMN2, null, null, null);
这里第一个参数用于设置不同的值,即如果设置为true,它将返回不同的列值


第六个参数表示要按
分组的列名

这是我在应用程序中用于从组表中获取distict名称的函数。希望您有所了解,看看它。如果列包含相同的名称,则只会获取不同的值

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;

}
public ArrayList getGroupNames(){
ArrayList组=新的ArrayList();
SQLiteDatabase db=this.getReadableDatabase();
字符串[]投影={COLUMN_GROUP_NAME};
//从组表中为组名称选择不同的值
Cursor Cursor=db.query(true,GROUPS\u TABLE\u NAME,projection,null,null,COLUMN\u GROUP\u NAME,null,null);
if(cursor.moveToFirst()){
做{
String group=cursor.getString(cursor.getColumnIndexOrThrow(COLUMN_group_NAME));
组。添加(组);
日志d(“组”,组+“gp”);
}while(cursor.moveToNext());
}
返回组;
}
第六个参数(除非您发现另一个重载)表示要按
分组的内容,这与查找不同行的
不同。