Hallo,
ich arbeite mich gerade in sqlite ein. Habe eine DB erstellt mit einer Tabelle die folgende spalten beinhaltet: ID,Name, Betrag, Grund, Datum, Icon.
Die einträge sollen an einer custom listview angezeigt werden, was ich auch hinbekommen habe. Das problem ist, wenn es beispielsweise einträge gibt mit gleichen namen, sollen dann diese in der listview nur einmal angezeigt werden.
Beispiel: in der Db ist folgende namen einträge
Ali
Richard
Tom
John
Elli
Tom
Ali
Ali
Mit der Methode
public void populateListViewFromDB() { //ListView mit Werten aus der db befüllen
getActivity().startManagingCursor(cursor = mainActivity.myDBHandler.getAllDifferentNames1());
String[] dbSpaltenNamen = new String[] {DataBaseHandler.KEY_NAME, /
DataBaseHandler.KEY_BETRAG,
DataBaseHandler.KEY_DATUM,
DataBaseHandler.KEY_ICONID};
int[] zuListViewIDs = new int[] {R.id.txt_name,
R.id.txt_betrag,
R.id.datum,
R.id.list_userImage};
SimpleCursorAdapter myCursorAdapter
= new SimpleCursorAdapter
(getActivity(), R.layout.list_zeile, cursor, dbSpaltenNamen, zuListViewIDs);
listView.setAdapter(myCursorAdapter);
}
Alles anzeigen
bekomme ich so wie im beispiel aufgelistet alle namen gelistet. Was ich aber will ist, dass gleich vorkommende namen nur einmal angezeigt werden, also Ali, Richard,Tom,John,Elli.
Damit ALLE zeilen ausgegeben werden erfolgt mit dieser Methode:
public class DataBaseHandler {
....
....
DB TABELLENSPALTEN
public static final String KEY_ID = "_id";
public static final String KEY_NAME = "name";
public static final String KEY_BETRAG = "betrag";
public static final String KEY_GRUND = "grund";
public static final String KEY_DATUM = "datum";
public static final String KEY_ICONID = "icon";
// TABELLEN SPALTEN NUMMER (ID = 0; NAME = 1,...)
public static final int COL_ROWID = 0;
public static final int COL_NAME = 1;
public static final int COL_BETRAG = 2;
public static final int COL_GRUND = 3;
public static final int COL_DATUM = 4;
public static final int COL_ICONID = 5;
public static final String[] ALL_KEYS = new String[] {KEY_ID, KEY_NAME, KEY_BETRAG, KEY_GRUND, KEY_DATUM, KEY_ICONID};
.....
.....
public Cursor getAllDifferentNames1() {
String where = null;
Cursor c = db.query(true, DATABASE_TABLE1, ALL_KEYS, where, null, null, null, null, null);
if (c != null) {
c.moveToFirst();
}
return c;
}
Alles anzeigen
ich habe die methode etliche male umgeschrieben, momentan sieht die so aus:
public Cursor getAllDifferentNames1() {
// String where = "SELECT DISTINCT " + KEY_NAME + " FROM " + DATABASE_TABLE1;
String where = "SELECT " + KEY_NAME + ", SUM(" + KEY_BETRAG + ") as " + KEY_BETRAG + " FROM " + DATABASE_TABLE1 + " GROUP BY " + KEY_NAME;
// Cursor c = db.rawQuery("SELECT " + KEY_NAME + ", SUM(" + KEY_BETRAG + ") as " + KEY_BETRAG + " FROM " + DATABASE_TABLE1 + " GROUP BY " + KEY_NAME, null);
Cursor c = db.rawQuery(where, ALL_DIFFKEYS);
if(c != null) {
c.moveToFirst();
}
return c;
}
Alles anzeigen
wenn ich das so lasse wie jetzt bekomme ich eine
java.lang.IllegalArgumentException: the mBindArgs is null. Irgendwas mache ich bei der sql-anweisung falsch, komme aber nicht drauf