2013-04-08 2 views
1

나는 책 제목, 날짜 추가 및 책을 반환해야하는 날짜를 저장하는 앱을 만들고 있습니다. 아래에 오늘 오늘부터 2 일 사이에 반환 될 모든 책을 가져 와서 목록보기로 반환 한 where 문을 보여줍니다. 그러나 그것은 작동하지 않습니다, 내가 잘못된거야 어디 확실하지 않다 :SQlite WHERE 문이 작동하지 않습니까?

   //convert string to int. 
      int myNum = Integer.parseInt(editbox3.getText().toString()); 

      //get todays date 
      Calendar cal=Calendar.getInstance(); 
      int currentDay=cal.get(Calendar.DAY_OF_MONTH); 

      //Add days on to todays date 
      cal.set(Calendar.DAY_OF_MONTH, currentDay+myNum); 
      cal.getTime(); //Result 

      //formate back to string 
      String formattedDate = new SimpleDateFormat("dd-MM-yyyy HH:mm").format(cal.getTime()); 


      bundle.putString(NotesDbAdapter.KEY_DUE,formattedDate 
        .toString()); 
:

public Cursor fetchAllDue() { 

    //get todays date 
    Calendar cal=Calendar.getInstance(); 
    int currentDay=cal.get(Calendar.DAY_OF_MONTH); 

    //Add days on to todays date 
    cal.set(Calendar.DAY_OF_MONTH, currentDay+2); 
    cal.getTime(); //Result 

    //format back to string 
    String formattedDate = new SimpleDateFormat("dd-MM-yyyy HH:mm").format(cal.getTime()); 


    //get todays date 
    Calendar cal1=Calendar.getInstance(); 
    int currentDay1=cal1.get(Calendar.DAY_OF_MONTH); 

    //Atodays date 
    cal1.set(Calendar.DAY_OF_MONTH, currentDay1); 
    cal1.getTime(); //Result 

    //format back to string 
    String formattedDate1 = new SimpleDateFormat("dd-MM-yyyy HH:mm").format(cal1.getTime()); 


    //body = date added, needs to be changed 
    return mDb.query(DATABASE_TABLE, new String[] { KEY_ROWID, KEY_TITLE, 
      KEY_BODY, KEY_EXTRA, KEY_DUE }, KEY_DUE + " BETWEEN 'formattedDate1' and 'formattedDate2'", null, null, null, null); 
} 

이 날짜는 "기한"에 대한 입력되면 코드입니다

날짜는 모두 문자열입니다. 누구든지 도와 줄 수 있습니까?

+1

'작동하지 않음'은 오류 또는 예기치 않은 결과를 의미합니까? – PinnyM

+0

글타래는 목록보기에 어떤 책도 표시하지 않습니다. 그래서 예상치 못한 결과. – Ruddy

답변

0

꽤 확실합니다.이 기능은 버디에서도 작동합니다.

기본적으로 두 개의 다른 답변이 혼합되어 있습니다.

 String[] params = new String[] { String.valueOf(formattedDate1), String.valueOf(formattedDate2) }; 

    return mDb.rawQuery("SELECT * FROM " + DATABASE_TABLE + " WHERE duedate BETWEEN ? AND ?", params); 

이 정보가 도움이되는지 알려주세요.

+0

고마워요! 처음으로 일했습니다. 당신은 G입니다! – Ruddy

+0

알고 싶습니다. 스택 오버 플로우에서 공통점은 downvote입니다. 부디. –

1

나는 의 답변으로 생각합니다. WebnetMobile이 맞습니다!

안드로이드에서 SQLite를 사용하면 항상 INTEGER 필드에 날짜의 UNIX 시간 스탬프가 포함됩니다. 따라서 쿼리를보다 신속하게 실행하고 WHERE 또는 문자열 - 날짜 변환 문제없이 실행할 수 있습니다.

Date from, to; 
long timeStampFrom = from.getTime(); 
long timeStampTo = to.getTime(); 

String[] params = new String[] { String.valueOf(from), String.valueOf(to) }; 
c = db.rawQuery("SELECT * FROM " + getTableName() + " WHERE DateTime BETWEEN ? AND ?", params); 

을하거나 UNIX 타임 스탬프를 사용하려면 :

Date date; 
... 
long timeStamp = date.getTime(); 

또한 쿼리에 대한 매개 변수로 날짜를 사용하려고 할 수 있습니다

String[] params = new String[] { String.valueOf(timeStampFrom), String.valueOf(timeStampTo)) }; 
c = db.rawQuery("SELECT * FROM " + getTableName() + " WHERE DateTime BETWEEN ? AND ?", params); 
+0

다시, "BETWEEN AND AND"란 무엇입니까? 지금부터 오늘과 이틀이 있어야합니다. 답장을 보내 주셔서 감사 드리며, 더 많은 도움이 될 수 있다면 도움이 될 것입니다. – Ruddy

+0

? 문자는 rawQuery() 함수에 전달하는 매개 변수의 자리 표시 자입니다. 그래서 params []는 'from'과 'to'날짜를 포함합니다. 쿼리를 실행할 때 dbmanager는 '? character는 params []의 값을 whit합니다. 첫번째 '?' params []의 첫 번째 요소로 대체되며, 두 번째 '? params []에서 두 번째로. 그것은 당신에게 명확한가요? –

+0

나는 그것을 알아 냈지만 당신의 의견에 감사드립니다. – Ruddy

2

당신의 쿼리는 잘못된 것입니다. formattedDate1formattedDate2을 사용하지만 코드가 formattedDateformattedDate1으로 설정되어 있습니다. 사용자가 전달하지 않은 쿼리가 쿼리를 작성하지 않는다는 사실은 말할 필요도 없습니다. 다음과 같은 형식이어야합니다.

String where = KEY_DUE + " BETWEEN ? AND ?"; 
String[] args = { String.valueOf(formattedDate1), String.valueOf(formattedDate2) }; 
return mDb.query(DATABASE_TABLE, where, args, null, null, null, null); 
+0

나는 이것이 무슨 뜻인지 이해하지 못합니다. ""무엇을 설명 할 수 있습니까? 그리고? "," 두 날짜 사이에 오늘 날짜와 2 일 사이의 날짜가 필요합니다. 제대로 쿼리 매개 변수를 전달하지 않습니다 -' – Ruddy

+0

@Ruddy, 는 또한 '문자열 [] 인수의 = {한 String.valueOf (formattedDate1), 한 String.valueOf (formattedDate2가)}이 비트를 이해 해달라고. 매개 변수에는 '?'을 사용해야합니다. 이 매개 변수 (또는이 값을 보유하는 변수) 값을 포함하는 배열은 쿼리 문자열 다음에 와야합니다.원래 쿼리는 'formattedDate1'및 'formattedDate2'로 올바른 구문이 아닌 매개 변수를 사용합니다 ... – PinnyM

+0

@Ruddy : 나는 심지어 매개 변수를 전달하지 않는다고 말할 것입니다 ... –

관련 문제