如何根据特定日期获取所有数据?

问题描述 投票:0回答:1

我正在使用SQLite来存储我的信息。我将日期存储为字符串格式。现在我想根据日期获取数据,单个日期可能有多个数据。我已经检查了相关问题,并按照我的方式尝试但无法找到解决方案。虽然我能够获取特定日期的单个数据的信息。

我从数据库中获取数据的代码:

public ArrayList<ExpenseModel> getSingleExpenseDetails(String date){
    SQLiteDatabase sqLiteDatabase=this.getReadableDatabase();
    String query = "select * from " + TABLE_SAVE_EXPENSE + " where "+ COLUMN_EXPENSE_DATE+ " = '" + date+ "'";
    Cursor cursor=sqLiteDatabase.rawQuery(query, null);
    ExpenseModel expenseModel=new ExpenseModel();
    ArrayList<ExpenseModel> expenseModels = new ArrayList<>();
    Log.v("Title : ",""+title);
    if (cursor.moveToFirst()){
        do {
            expenseModel.setTitle(cursor.getString(cursor.getColumnIndex(COLUMN_EXPENSE_TITLE)));
            expenseModel.setDescription(cursor.getString(cursor.getColumnIndex(COLUMN_EXPENSE_DESCRIPTION)));
            expenseModel.setAmount(cursor.getInt(cursor.getColumnIndex(COLUMN_EXPENSE_AMOUNT)));
            expenseModel.setDate(cursor.getString(cursor.getColumnIndex(COLUMN_EXPENSE_DATE)));
            expenseModel.setCurrency(cursor.getString(cursor.getColumnIndex(COLUMN_EXPENSE_CURRENCY)));
            Log.v("Info : ",""+cursor.getString(cursor.getColumnIndex(COLUMN_EXPENSE_TITLE)));
            expenseModels.add(expenseModel)
        }while (cursor.moveToNext());
    }
    cursor.close();
    sqLiteDatabase.close();
    return expenseModels;
}

ExpenseModel类:

package app.shakil.com.dailyexpense.Models;

public class ExpenseModel {
    private int id;
    private String title;
    private String description;
    private String date;
    private int amount;
    private String currency;

public ExpenseModel(){

}

public ExpenseModel(String title,String description,String date,int amount,String currency){
    this.title=title;
    this.description=description;
    this.date=date;
    this.amount=amount;
    this.currency=currency;
}

public int getId() {
    return id;
}

public void setId(int id) {
    this.id = id;
}

public String getTitle() {
    return title;
}

public void setTitle(String title) {
    this.title = title;
}

public String getDescription() {
    return description;
}

public void setDescription(String description) {
    this.description = description;
}

public String getDate() {
    return date;
}

public void setDate(String date) {
    this.date = date;
}

public int getAmount() {
    return amount;
}

public void setAmount(int amount) {
    this.amount = amount;
}

public String getCurrency() {
    return currency;
}

public void setCurrency(String currency) {
    this.currency = currency;
}
}
android android-sqlite android-database android-date
1个回答
0
投票

你在代码中犯的一个明显错误就是你在循环之前初始化expenseModel并在循环中为所有行使用它:

ExpenseModel expenseModel=new ExpenseModel();

在循环内移动该行:

do {
    ExpenseModel expenseModel=new ExpenseModel();   
    expenseModel.setTitle(cursor.getString(cursor.getColumnIndex(COLUMN_EXPENSE_TITLE)));
    expenseModel.setDescription(cursor.getString(cursor.getColumnIndex(COLUMN_EXPENSE_DESCRIPTION)));
    expenseModel.setAmount(cursor.getInt(cursor.getColumnIndex(COLUMN_EXPENSE_AMOUNT)));
    expenseModel.setDate(cursor.getString(cursor.getColumnIndex(COLUMN_EXPENSE_DATE)));
    expenseModel.setCurrency(cursor.getString(cursor.getColumnIndex(COLUMN_EXPENSE_CURRENCY)));
    Log.v("Info : ",""+cursor.getString(cursor.getColumnIndex(COLUMN_EXPENSE_TITLE)));
    expenseModels.add(expenseModel)
}while (cursor.moveToNext()); 
© www.soinside.com 2019 - 2024. All rights reserved.