【发布时间】:2012-05-15 12:26:31
【问题描述】:
我设置了以下光标来填充一个包含用户付款历史记录的对话框
Cursor 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);
问题在于,如果存在不止一种类型的债务,并且每笔债务的付款都乱序进行,那么当付款历史记录返回结果时,它会以乱序行号的形式返回,例如1、2、6、7、9、12等我知道它正在从数据库中提取 _id(唯一键),但是有没有办法重新设置或更改查询中的行号,以便每个结果返回为“1、2、3、4、5 等" 不考虑原始 ID?
我认为 ORDER BY _id 甚至 ORDER BY Date ASC 可以解决这个问题,但它没有。
我在数据库中的行看起来像这样:
1,测试,2012 年 4 月 13 日,250
2,测试,2012 年 4 月 13 日,300
3,测试,2012 年 4 月 14 日,222
4, TEST2, 4/14/2012, 500
5,测试,2012 年 4 月 15 日,600
当用户单击“TEST”的历史记录时,它会返回为 1、2、3、5... 如果他们拉出“TEST2”的历史记录,它会显示为“4”,我正在尝试得到它,所以 TEST 显示“1,2,3,4”,TEST2 显示“1”
该死,我无法回答自己的答案,但这是我最终要做的:
谢谢各位。我找到了一个修改视图的替代选项,因此不必触摸 SqLite db。这是我找到的链接Modifying SimpleCursorAdapter's data
结果如下:
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);
这可能不是最迷人的方式,但现在每次窗口出现历史记录时,它都使用行号(加一)来指示它是哪个#。 谢谢大家!
【问题讨论】:
-
你为什么不拿你从Cursor#getPosition()得到的号码
-
永远不要将值与原始查询字符串连接并执行它。 en.wikipedia.org/wiki/SQL_injection
-
@AustynMahoney 你是说把它改成类似这样的东西: PaymentsCursor = db.getReadableDatabase().rawQuery(" SELECT _id, Date, Payment FROM tblPaymentHistory WHERE DebtName = ?"+ "ORDER BY _id ASC ", 新字符串 [] { 债务名称 }); dang 我无法将其正确格式化为代码。对不起