2016-06-29 1 views
2

저는 만들고있는 Android 앱에 4 개의 버튼이 있습니다. 각 단추는 SQLite 데이터베이스를 쿼리하고 날짜를 기반으로 레코드를 가져옵니다.SQLite가 날짜를 기반으로 올바른 레코드를 반환하지 않습니다.

날짜가 내 테이블에 DATETIME으로 저장되어 있으며 날짜도 함께 쿼리하고 있습니다. (단추는 '오늘', '주', '월', '모두'입니다. 지난 달 이전에 완료된 모든 것을 잡을 때까지 모든 것이 잘 작동합니다.

오늘 날짜는 내가 SQLite 데이터베이스에 6 월 16 2016에 대한 항목을 작성하고 성공적으로 저장 유월 29 일 2016

입니다. 2016 년 6 월 27 일에 다른 항목을 만들고 성공적으로 저장합니다.

이제 '오늘'버튼을 누르고 0 개의 레코드를 반환합니다. 나는 일주일 버튼을 누르면

(수정) 1 개 레코드 (수정 - 6 월 27 일 작성)를 돌려 나는 달 버튼을 눌러 0 레코드를 반환

합니다.

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은 한 달 동안 가장 큰 일 수를 나타냄)

날짜가 한 달 뒤로 바뀌면 문제가 발생하는 것으로 보입니다. 제가 31 일 대신 20 일을 제외하면, 날짜는 "6 월 9 일"이 될 것이고 나는해야 할 두 기록을 모두 받게 될 것입니다. 하지만 날짜가 5 월로 바뀌면 0 개의 레코드를 받게됩니다.

기타의 QueryStrings 난 작동하지 않았다

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

를 시도?

나는 여전히 Android에 익숙하지 않으므로 사과하는 것이 좋습니다. 나는 주변에 봤지만 도움이 될만한 것을 찾지 못했습니다.

UPDATE : 추가 정보 여기에

더 도움이 될 수있는 몇 가지 추가 코드

내 SQLite는에 타임 스탬프 항목에 사용되는 dateFormat는은 다음과 같습니다

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

당신이 자바 Calendar 객체의 월을 변경하려는 경우 사용해야합니다 : 위의 조각 하나에 의해 다시 한 달을 출시 할

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

. 예를 들어 2 월 15 일에 cal.add(Calendar.DATE, -31)에 전화하면 월이 바뀌지 만 이상한 결과가납니다.

업데이트 :

당신 또한 당신이 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

관련 문제