Как получить все данные на определенную дату? - PullRequest
0 голосов
/ 14 апреля 2019

Я использую 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;
}
}

1 Ответ

0 голосов
/ 14 апреля 2019

Одна очевидная ошибка, которую вы делаете в своем коде, заключается в том, что вы инициализируете 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()); 
...