首页 > 解决方案 > 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();
        }

标签: javaandroidsqliteandroid-sqlite

解决方案


COL_DATE是一个包含列名称的变量,但您将其用作字符串文字。
改成:

String selectQuery = "SELECT * FROM " + TABLE_HISTORY +" ORDER BY " + COL_DATE + " DESC";

推荐阅读