我使用ArrayList>将数据插入SQLite数据库。我想使用简单的适配器将唯一值检索到listview中。我使用相同的键来插入值。我怎样才能在listview中获得不同的值? 这是我的代码..
Databasehandler.java
public void insertAnimal(HashMap<String, String> queryValues) {
SQLiteDatabase database = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("animalName", queryValues.get("animalName"));
database.insert("animals", null, values);
database.close();
}
public ArrayList<HashMap<String, String>> getAllAnimals() {
ArrayList<HashMap<String, String>> wordList;
wordList = new ArrayList<HashMap<String, String>>();
String selectQuery = "SELECT * FROM animals";
SQLiteDatabase database = this.getWritableDatabase();
Cursor cursor = database.rawQuery(selectQuery, null);
if (cursor.moveToFirst()) {
do {
HashMap<String, String> map = new HashMap<String, String>();
map.put("animalId", cursor.getString(0));
map.put("animalName", cursor.getString(1));
wordList.add(map);
} while (cursor.moveToNext());
}
return wordList;
}
这是我的MainActivity.java
DBController controller = new DBController(this);
ArrayList<HashMap<String, String>> animalList = controller.getAllAnimals();
if(animalList.size()!=0) {
ListView lv = getListView();
ListAdapter adapter = new SimpleAdapter( MainActivity.this,animalList, R.layout.view_animal_entry, new String[] { "animalId","animalName"}, new int[] {R.id.animalId, R.id.animalName});
setListAdapter(adapter);
答案 0 :(得分:2)
使用DISTINCT关键字消除结果集中的重复行:
SELECT DISTINCT * FROM animals
请注意,这只会删除所有列中重复的行。因此,如果您在不同的ID下拥有相同的动物名称,您仍将获得两行。例如,如果您的表包含:
animalId animalName
1 Lion
1 Lion
2 Lion
3 Tiger
3 Tiger
结果将是:
animalId animalName
1 Lion
2 Lion
3 Tiger
另一种方法是按动物名称分组:
SELECT * FROM animals
GROUP BY animalName
结果(很可能)是:
animalId animalName
2 Lion
3 Tiger
请注意,您现在拥有唯一的名称。但是,对于已分组的名称(本示例中为Lion),您获得的animalId将来自分组的集合中的一行。你得到的确切的一个没有定义。
答案 1 :(得分:1)
如果你想获得具有不同animalID的记录,那么你会做这样的事情
public Cursor getUniqueValues() {
Cursor cursor = database.query(SQLiteHelper.TABLE_NAME,
allColumns, SQLiteHelper.ANIMAL_ID + " like \'Whatever\'", null, null, null, null ,null);
return cursor;
}