我使用
从我的数据库中获取数据cursor = db.query("WebLeadMaster", select, "condition1="+conditionVal1+
" and condition2="+ConditionVal2,null, null, null, "RegistrationTime DESC");
我正在光标中获取数据。要显示数据,请使用以下代码:
SimpleCursorAdapter mAdapter = new SimpleCursorAdapter(this,
R.layout.resultleadlookup, cursor, columns, to);
mAdapter.notifyDataSetChanged();
lstResult.setAdapter(mAdapter);
所以,我无法修改游标的内容。排序查询的条件为“RegistrationTime”,它是 字符串数据类型。 如下图所示,它没有采用正确的排序格式。 (不是根据日期时间)。
我应该在代码中进行哪些更改,以便根据日期时间进行正确排序?
如果我改变我的数据库查询,看起来像
cursor = db.query("WebLeadMaster", select, "condition1="+conditionVal1+
" and condition2="+ConditionVal2,null, null, null, null);
它提供升序。我想要的只是降序。
答案 0 :(得分:2)
最简单的建议是将日期保存为不同的格式(但仍保存为字符串)到数据库中。如果您将数据保存为SQLite的默认日期格式(YYYY-MM-DD HH:NN:SS),您可以轻松地对日期进行排序。
要以您的格式显示日期,您只需要将日期重新格式化为正确的格式。
答案 1 :(得分:2)
好吧,我改变了我的表结构。我在其中添加了另一个字段“_id”。将属性设置为 AUTO INCREMENT ,并根据 _id 字段对列表进行排序。
答案 2 :(得分:1)
如果您使用ORM,则可以按时间戳对数据进行排序。 ORM使数据库中的数据插入和数据检索更容易。 您必须将jar文件包含到项目中才能使用ORM ...
答案 3 :(得分:0)
由于SQLite没有日期时间类型,在SQLite(EPOCH时间)中将日期类型存储为LONG / INT / NUMERIC,因此更容易排序
然后将ViewBinder
添加到Adapter
/*field in activity/fragment*/
final static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); //or other format that you wana to show in ListView
...
mAdapter.setViewBinder(new SimpleCursorAdapter.ViewBinder() {
@Override
public boolean setViewValue(View view, Cursor cursor,
int columnIndex) {
final int id = view.getId();
switch (id) {
case R.id.id_of_textview_with_date_data:
final Calendar cal = Calendar.getInstance();
cal.setTimeInMillis(cursor.getLong(columnIndex));
((TextView) view).setText(sdf.format(cal.getTime()));
return true;
}
return false;
}
});
...或者像dennisg指出的那样将它存储为STRING / VARCHAR 编辑:在“yyyy-MM-dd HH:mm:ss”格式中