2014-01-11 54 views
0

我想获取唯一的列名称并将其显示为列表适配器。获取多个条目的SELECT DISTINCT sqlite android?

public String[] getAllUsers() { 
     String[] contactList = new String[100]; 

     SQLiteDatabase db = this.getWritableDatabase(); 
     Cursor cursor = db.query(true,TABLE_TRANS, new String[] { KEY_ID ,KEY_NAME, KEY_CASH,KEY_DESC,KEY_DATE }, null, null, KEY_NAME, null, null, null); 
     int i=0; 
     // looping through all rows and adding to list 
     if (cursor.moveToFirst()) { 
      do {    
       contactList[i] = cursor.getString(1); 
       i++; 
      } while (cursor.moveToNext()); 
     } 

     // return contact list 
     return contactList; 

    } 

以上是我的数据库类中的方法。

而且从mainActivity我把这种方法

private void updateUserList() { 
    // TODO Auto-generated method stub 

    String[] contactList = new String[100]; 
    contactList = db.getAllUsers(); 
      Log.d("User List",contactList[0]); 
      ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(), 
         android.R.layout.simple_list_item_1, contactList); 
        setListAdapter(adapter); 
} 

名单得到更新,但名单是越来越重复整体

回答

1

我不知道我是否完全理解你的问题。

如果你想列在数据库中的所有行KEY_ID ,KEY_NAME, KEY_CASH,KEY_DESC,KEY_DATE没有KEY_NAME重复使用此查询:

Cursor cursor = db.query(true,TABLE_TRANS, 
       new String[] { KEY_ID ,KEY_NAME, KEY_CASH,KEY_DESC,KEY_DATE }, 
       null, null, null, null, null, null); 

在你的方法不使用Array改用ArrayList<String>

public ArrayList<String> getAllUsers() { 
    ArrayList<String> contactList = new ArrayList<String>(); 

    SQLiteDatabase db = this.getWritableDatabase(); 
    Cursor cursor = db.query(true,TABLE_TRANS, 
        new String[] { KEY_ID ,KEY_NAME, KEY_CASH,KEY_DESC,KEY_DATE }, 
        null, null, null, null, null, null); 

    // looping through all rows and adding to list 
    if (cursor.moveToFirst()) { 
     do {    
      contactList.add(cursor.getString(cursor.getColumnIndex(KEY_NAME))); 

     } while (cursor.moveToNext()); 
    } 

    // return contact list 
    return contactList; 

} 

而且updateUserList( ):

private void updateUserList() { 
// TODO Auto-generated method stub 

ArrayList<String> contactList; 

contactList = db.getAllUsers(); 
     Log.d("User List", contactList.get(0)); 
     ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(), 
        android.R.layout.simple_list_item_1, contactList); 
       setListAdapter(adapter); 
} 

由于您只使用游标中的KEY_NAME列,因此可以简化查询以仅返回该列。

Cursor cursor = db.query(true,TABLE_TRANS, 
       new String[] {KEY_NAME}, null, null, null, null, null, null); 
0

的问题是与初始化字符串数组为100,我写了方法来获得总数的计数,它工作正常。

public int getUsersCount() { 

     SQLiteDatabase db = this.getReadableDatabase(); 
     Cursor cursor = db.query(true,TABLE_TRANS, new String[] { KEY_ID ,KEY_NAME, KEY_CASH,KEY_DESC,KEY_DATE }, null, null, KEY_NAME, null, null, null); 
     //cursor.close(); 
     // return count 
     return cursor.getCount();}