2016-06-29 2 views
2

У меня есть четыре кнопки на приложении Android, которое я делаю. Каждая кнопка запрашивает базу данных SQLite и захватывает записи на основе даты. (Кнопки «Сегодня», «Неделя», «Месяц», «Все»)SQLite не возвращает правильные записи на основе даты

Дата хранится как DATETIME в моей таблице, и я также запрашиваю ее с датой. Все работает хорошо, пока я не хватаю все, что было сделано раньше месяца.

Пример

Дата сегодняшними является 29 июня 2016

Я создаю запись на 16 июня 2016 года в моей базе данных SQLite и он хранит успешно. Я создаю еще одну запись 27 июня 2016 года и она успешно хранится.

Теперь я нажимаю кнопку «Сегодня» и возвращает 0 записей. (Поправьте)

жмет кнопку недели и вернуть 1 запись (Correct - Создана 27 июня)

жмет кнопку месяца и вернуться 0 записей. (. Некорректное я должен получать 2 записей)

Кодекс

Это запрос, который я использую для моей базы данных:

String queryString = "SELECT * FROM job_quote_lookup WHERE created_at >= '" + date + "' ORDER BY created_at ASC" 

'дата' рассчитывается следующим образом:

Calendar cal = Calendar.getInstance(); 
cal.add(Calendar.DATE, -31); 
Date fromDate = cal.getTime(); 

date = dateFormat.format(fromDate); 

(31 представляет собой максимально возможное количество дней в месяце)

Кажется, что проблема возникает, когда дата вернется месяц. Если я удалю 20 дней вместо 31, дата будет «9 июня», и я получу ОБА записи, как я должен. Но если дата будет в мае, я получу 0 записей.

Другие queryStrings я попробовал

String queryString = "SELECT * FROM job_quote_lookup WHERE created_at >= date('now','-31 days') ORDER BY created_at ASC" 

Это не похоже, не работает?

Я все еще новичок в Android, поэтому извиняюсь, если это плохой вопрос. Я гугл, но не нашел ничего, что могло бы помочь.

UPDATE: Extra Info

Вот некоторые дополнительный код, который может быть более полезным

DateFormat используется для временных записей штемпеля в мой SQLite является:

private String getDateTime() { 
    SimpleDateFormat dateFormat = new SimpleDateFormat(
      "dd/MM/yyyy - HH:mm", Locale.getDefault()); //"yyyy-MM-dd HH:mm:ss" - "dd-MM-yyyy HH:mm:ss" 
    Date date = new Date(); 
    return dateFormat.format(date); 
} 

Формат даты используется, когда я обращаюсь к моей базе данных:

DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy"); 

Я не уверен, что это правильно, однако мои аргументы в пользу отказа от «HH: mm» были вызваны тем, что опция «Сегодня» не работает правильно, так как она вернет все большее, чем текущее время (что, очевидно, ничего в сроки тиснения)

Невозможно решить ... Завершение преобразования моей базы данных DATETIME в INTEGER и сохранение даты в миллисекундах, а затем преобразование формата даты и миллисекунд в запрос и отображение информации.

ответ

3

Если вы хотите изменить месяц на Java Calendar объекта вам нужно будет использовать:

cal.add(Calendar.MONTH, -1); 

где выше фрагмент кода будет катить месяц назад на один. Например, если вы вызываете cal.add(Calendar.DATE, -31) 15 февраля, вы получаете странный результат, потому что месяц не изменится, но день перевернется.

Update:

Вы также должны убедиться, что формат даты вы подаете в MySQL правильно. MySQL ожидает формат YYYY-MM-DD для дат, так что используйте это:

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); 
String date = sdf.format(cal.getTime()); 

Я рекомендую использовать JodaTime, если вы ожидаете сложный календарь операций.

+0

Я изменил соответствующий код, но я все еще возвращаю 0 записей. Используя пример выше для записей и той же строки запроса, это вывод строки в мой Logcat: E/QuotesList: SELECT * FROM job_quote_lookup WHERE created_at> = '29/05/2016 'ORDER BY created_at ASC – Noodelz

+0

Ваш формат даты неверен для MySQL, qv мой обновленный ответ. –

+0

Я сделал редактирование на свое оригинальное сообщение, чтобы предоставить дополнительную информацию, которая, надеюсь, будет полезной :) Я попытался переключить формат даты, чтобы соответствовать «yyyy-MM-dd», но он возвратил ВСЕ записи, независимо от того, какая кнопка была нажат. :( – Noodelz

Смежные вопросы