java - SQlite 数据库未按日期排序
问题描述
我有这种方法,它旨在在传递给数组时按日期顺序列出一系列事务,只是它根本没有顺序出现,不知道我哪里出错了。我没有收到任何错误,但实际上并没有工作。
public List<Record> getAllAccountRecords() {
ArrayList<Record> all_Records = new ArrayList<Record>();
String selectQuery = "SELECT * FROM " + TABLE_HISTORY +" ORDER BY 'COL_DATE' DESC";
SQLiteDatabase db = this.getReadableDatabase();
Cursor c = db.rawQuery(selectQuery, null);
// looping through all rows and adding to list
if (c.moveToFirst()) {
do {
Record record = new Record();
record.setId(c.getInt(c.getColumnIndex(COL_ID)));
record.setAccountType(c.getString(c.getColumnIndex(COL_ACCOUNT_TYPE)));
record.setDescription(c.getString(c.getColumnIndex(COL_DESCRIPTION)));
record.setExpenseSource(c.getString(c.getColumnIndex(COL_EXPENSES_SOURCE)));
record.setExpenseAmount(c.getString(c.getColumnIndex(COL_EXPENSES_AMOUNT)));
record.setIncomeSource(c.getString(c.getColumnIndex(COL_INCOME_SOURCE)));
record.setIncomeAmount(c.getString(c.getColumnIndex(COL_INCOME_AMOUNT)));
record.setDate(c.getString(c.getColumnIndex(COL_DATE)));
all_Records.add(record);
} while (c.moveToNext());
c.close();
}
return all_Records;
调用主要活动 也许它对数组的写入会使它失序,但是我该如何对数组进行排序。
final List<Record> RecordsArray = mDatabase.getAllAccountRecords();
if (RecordsArray.size() > 0) {
for (int i = 0; i < RecordsArray.size(); i++) {
Record record = RecordsArray.get(i);
if (record.getExpenseAmount() != null) {
accountRecords.add('-' + " £ " + record.getExpenseAmount() + " " + `record.getExpenseSource()`
+ " " + record.getDate() + " " + record.getRecordDescription());
}
if (record.getIncomeAmount() != null) {
accountRecords.add('+' + " £ " + record.getIncomeAmount() + " " + `record.getIncomeSource()`
+ " " + record.getDate() + " " + record.getRecordDescription());
}
}
ArrayAdapter<String> listAdapter = new ArrayAdapter<>(this,
R.layout.simple_list_item_1, accountRecords);
historyList.setAdapter(listAdapter);
listAdapter.notifyDataSetChanged();
historyList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
Context context = getApplicationContext();
int duration = Toast.LENGTH_SHORT;
String text = "Description:
"
+ RecordsArray.get(position).getRecordDescription();
Toast toast = Toast.makeText(context, text, duration);
toast.show();
}
});
} else {
mDatabase.closeDB();
}
}
设定日期的方法
public void onClick(View v) {
final Calendar cldr = Calendar.getInstance();
int day = cldr.get(Calendar.DAY_OF_MONTH);
int month = cldr.get(Calendar.MONTH);
int year = cldr.get(Calendar.YEAR);
// date picker dialog
picker = new DatePickerDialog(AddIncomeActivity.this,
new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
eText.setText(dayOfMonth + "/" + (monthOfYear + 1) + "/" + year);
month_select = monthOfYear;
}
}, year, month, day);
picker.show();
}
解决方案
COL_DATE
是一个包含列名称的变量,但您将其用作字符串文字。
改成:
String selectQuery = "SELECT * FROM " + TABLE_HISTORY +" ORDER BY " + COL_DATE + " DESC";
推荐阅读
- excel - VBA 创建枢轴
- javascript - 为什么最后两个函数有效,但第一个无效?
- c# - 如何隐藏 WPF 元素以与自动化框架一起正常工作?
- flutter - 如何控制使用“复制”/“剪切”、“粘贴”选项出现的弹出框控件的颜色?
- c# - C# Selenium Chromedriver - 如果达到超时关闭浏览器
- sql - 如何使用完全外连接加入多个选择语句。错误:子查询返回多于一行
- apache - Apache Netbeans 10 IDE 安装
- python - 如何将我的应用程序上的工具栏与 Python 中的 Kivy 集成?
- json - 在 React Native 应用程序中解析来自 REST 服务的 JSON
- android - 如何在具有纵横比的每个屏幕上设置图像适合度