【问题标题】:How to fetch the all data based on a particular date?如何根据特定日期获取所有数据?
【发布时间】:2019-04-14 15:26:38
【问题描述】:

我正在使用 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;
}
}

【问题讨论】:

  • 如果dateCOLUMN_EXPENSE_DATE 列的格式,您的代码应该可以工作。
  • 格式一样,但是一个日期有多个数据时会出现问题。
  • 什么问题?您将获得该日期的所有行。
  • 找不到指定日期的所有数据,返回一个空的ExpenseModel。
  • 那么你没有传递正确的日期值或格式。

标签: java android sqlite date android-sqlite


【解决方案1】:

您在代码中犯的一个明显错误是在循环之前初始化 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()); 

【讨论】:

  • 谢谢这解决了我的问题。但我从来没有这样想。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-13
  • 1970-01-01
  • 2021-08-01
  • 2021-10-17
  • 2016-04-10
相关资源
最近更新 更多