Недельные данные не возвращаются с использованием Between в SQLite - PullRequest
0 голосов
/ 24 июня 2018
 @Override
public void onCreate(SQLiteDatabase db) {
    this.db = db;
    db.execSQL(
            "CREATE TABLE `Transaction` (" +
            "_id integer primary key autoincrement," +
            "`categoryID` INT NOT NULL , " +
            "`incomeAmount` INT NOT NULL, " +
            "`expenseAmount` INT NOT NULL, " +
            "`note` VARCHAR(50) NOT NULL , " +
            "`transactionDate` INT NOT NULL, " +
            "`repeatType` INT NOT NULL  , " +
            "`transactionType` BOOLEAN NOT NULL )"
    );
}
public Cursor readDatabaseTransactionWeekly(Date date){
    Calendar cal = Calendar.getInstance();
    cal.setTime(date);
    cal.set(Calendar.HOUR_OF_DAY, 0);
    cal.clear(Calendar.MINUTE);
    cal.clear(Calendar.SECOND);
    cal.clear(Calendar.MILLISECOND);
    cal.set(Calendar.DAY_OF_WEEK, cal.getFirstDayOfWeek());

    Date startWeek = cal.getTime();
    Calendar nextWeelCal = Calendar.getInstance();
    nextWeelCal.setTime(cal.getTime());
    nextWeelCal.add(Calendar.WEEK_OF_MONTH,1);
    Date nextWeek = nextWeelCal.getTime();
    Log.d(TAG, "readDatabaseTransactionWeekly: "+startWeek+" to "+nextWeek+"");
    this.db = getReadableDatabase();
    Cursor transactionRecordWeekly = this.db.rawQuery("SELECT * FROM `Transaction` WHERE transactionDate BETWEEN '"+startWeek+"' AND '"+nextWeek+"'",null);
    transactionRecordWeekly.moveToFirst();
    return transactionRecordWeekly;
}

public Cursor readDatabaseTransactionMonthly(Date date){
    Calendar cal = Calendar.getInstance();
    cal.setTime(date);
    cal.set(Calendar.HOUR_OF_DAY, 0);
    cal.clear(Calendar.MINUTE);
    cal.clear(Calendar.SECOND);
    cal.clear(Calendar.MILLISECOND);
    cal.set(Calendar.DAY_OF_MONTH, 1);
    Date startMonth = cal.getTime();
    Calendar nextMonthCal = Calendar.getInstance();
    nextMonthCal.setTime(cal.getTime());
    nextMonthCal.add(Calendar.MONTH,1);
    Date nextMonth = nextMonthCal.getTime();
    this.db = getReadableDatabase();
    Cursor transactionRecordMonthly = this.db.rawQuery("SELECT * FROM `Transaction` WHERE transactionDate BETWEEN '"+startMonth+"' AND '"+nextMonth+"'",null);
    transactionRecordMonthly.moveToFirst();
    return transactionRecordMonthly;
}

Я пытаюсь прочитать данные из SQLite в Andoroid на недельной и месячной основе, и я использую оператор SQLite BETWEEN.Но это не работает, как ожидалось.Еженедельный раздел не возвращает никаких данных вообще, в то время как Ежемесячно работает нормально, не показывает данные текущей недели.Я изучил еще 4 вопроса, связанных со стековым потоком, но не смог их решить.

Ответы [ 3 ]

0 голосов
/ 24 июня 2018

cal.set(Calendar.DAY_OF_WEEK, cal.getFirstDayOfWeek()); устанавливает дату на понедельник 18 июня

0 голосов
/ 07 июля 2018

Я изменил тип поля "TransactionsDate" на "long", а затем вставил даты в базу данных, преобразовав даты в миллисекундах.Это решение, которое сработало для меня, и, возможно, оно не очень хорошее, но оно сработало.Я пишу, что это может помочь кому-то еще.

0 голосов
/ 24 июня 2018

Я думаю, что Calendar.WEEK_OF_MONTH не делает то, что вы ожидаете. Попробуйте добавить 7 дней вместо этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...