Ich habe den folgenden Cursor bekommeWie auch immer, Zeilennummer in SQLITE Rawquery zu ändern?
ein Dialogfeld mit einer Benutzer der Zahlung der Geschichte zu füllen einrichtenCursor PaymentsCursor = db.getReadableDatabase().rawQuery(
"SELECT _id, Date, Payment FROM tblPaymentHistory WHERE DebtName = '"
+ debtname + "'" + "ORDER BY _id ASC", null);
SimpleCursorAdapter HistoryAdapter = new SimpleCursorAdapter(this,
R.layout.paymenthistoryrow, PaymentsCursor, from, to);
Das Problem ist aber, dass, wenn es mehr als eine Art von Schulden und Zahlungen an jede Schuld gemacht Wenn die Zahlungshistorie ihre Ergebnisse zurückgibt, werden sie als Out-of-Order-Zeilennummern zurückgegeben, z. B. 1,2,6,7,9,12 usw. Ich weiß, dass es den _id (eindeutigen Schlüssel) aus der Datenbank zieht, aber gibt es eine Möglichkeit, die Zeilennummer in der Abfrage neu zu erstellen oder zu ändern, so dass jedes Ergebnis als "1,2,3,4,5, etc "unabhängig von der ursprünglichen ID?
Ich dachte, dass die ORDER BY _id oder sogar ORDER BY Datum ASC würde dies beheben, aber es tat es nicht.
Meine Zeilen in der Datenbank in etwa so aussehen:
1, TEST, 2012.04.13, 250
2, TEST, 2012.04.13, 300
3, TEST, 4/14/2012, 222
4, TEST2, 2012.4.14, 500
5, TEST, 2012.4.15, 600
Wenn der Benutzer die Geschichte für die "TEST" klickt, kehrt zurück, wie 1,2,3,5 ... und wenn sie den Verlauf für "TEST2" aufrufen, wird es als "4" angezeigt, ich versuche es zu bekommen, so dass TEST "1,2,3,4" zeigt und TEST2 zeigt „1“
Verdammt ich kann nicht meine eigene Antwort beantworten, aber hier ist, was ich am Ende tun:
Danke Jungs. Ich habe eine alternative Option gefunden, mit der die Ansicht geändert wurde, um die SqLite-Datenbank nicht zu berühren. heres die Verbindung, die ich Modifying SimpleCursorAdapter's data
gefunden Und hier ist das Ergebnis:
PaymentsCursor = db.getReadableDatabase().rawQuery(
" SELECT _id, Date, Payment FROM tblPaymentHistory WHERE DebtName = '"
+ debtname + "'" + "ORDER BY _id ASC", null);
String[] from = new String[] { DbAdapter.KEY_HISTORY_ID,
DbAdapter.HISTORY_DATE, DbAdapter.HISTORY_PAYMENT };
int[] to = new int[] { R.id.PAYMENTNO, R.id.PAYMENTDATE,
R.id.PAYMENTAMOUNT };
SimpleCursorAdapter HistoryAdapter = new SimpleCursorAdapter(this,
R.layout.paymenthistoryrow, PaymentsCursor, from, to);
HistoryAdapter.setViewBinder(new SimpleCursorAdapter.ViewBinder() {
@Override
public boolean setViewValue(View view, Cursor cursor, int column) {
if (column == 0) { // let's suppose that the column 0 is the
// date
TextView tv = (TextView) view;
String rownum = String.valueOf(cursor.getPosition() + 1);
// here you use SimpleDateFormat to bla blah blah
tv.setText(rownum);
return true;
}
return false;
}
});
paymenthistory.setAdapter(HistoryAdapter);
Es ist nicht die glamouröse Art und Weise sein, aber jetzt jedes Mal das Fenster mit der Geschichte kommt, wird es mit der Zeilennummer (plus eins) um anzuzeigen, welche # es ist. Danke allen!
warum nicht Sie nehmen die Nummer, die Sie von [Cursor # getPosition()] erhalten haben (http: // deve loper.android.com/reference/android/database/Cursor.html#getPosition%28%29) – zapl
NIEMALS Werte mit einer unbearbeiteten Abfragezeichenfolge verketten und ausführen. http://en.wikipedia.org/wiki/SQL_injection –
@AustynMahoney Willst du sagen, es zu etwas wie zu ändern: PaymentsCursor = db.getReadableDatabase(). RawQuery ("SELECT _id, Datum, Zahlung von tblPaymentHistory WHERE DebtName = ? "+" ORDER BY _id ASC ", neuer String [] {Schuldname}); dang Ich kann das nicht als Code richtig formatieren. Es tut uns leid –