2013-07-23 73 views
2

SQLite中進行更復雜的SQL查詢時,query()和rawQuery()之間的區別。添加DISTINCT關鍵字查詢()Android中的SQLite

例如

我想使用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;       
    } 

回答

7

取而代之的是...

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文檔似乎有點難以直接鏈接,但描述兩者的文檔頁面是here

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

+0

第六個參數(除非您找到另一個過載)表示什麼是「GROUP BY」,這與查找不同行的「DISTINCT」查詢非常不同。 –

+0

確定....更新了我的答案...謝謝 – dd619

0

這是我在我的應用程序用於從一組表中獲取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; 

} 
看看it.only不同的值將取