获取SELECT DISTINCT sqlite android的多个条目?

时间:2014-01-11 15:03:22

标签: android sql sqlite

我正在尝试获取唯一的列名并将其显示为列表适配器。

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);
}

列表正在更新,但列表整体重复

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分:0)

问题在于将String数组初始化为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();}