2011-02-04 13 views
0

여기에 문제가 있습니다.DatePicker 날짜를 사용하여 DB에서 데이터를 가져 오는 중 문제가 발생했습니다.

메서드에 전달 된 날짜를 기준으로 데이터베이스에서 날짜를 검색하려고하고 값을 반환합니다.

문제는 날짜를받는 변수를 전달하려고 할 때 DB에서 데이터를 선택하는 메서드가 아무 것도 반환하지 않는다는 것입니다. (그리고 LogCat 날짜 변수를 인쇄하고 확인, 날짜 값이 맞습니다.)이 같은 문자열 값을 전달하면 ("1/01/1111") 제대로 반환합니다.

여기에 값을 가져 와서 텍스트를 설정하는 활동에 대한 방법이 있습니다.

public void setBasicContent() { 

    date = (mMonth + 1) + "/" + mDay + "/" + mYear + " "; 
    hpdData = this.hpd.selectDuration(date); 
    mDateDisplay.setText(hpdData); 

} 

그리고 여기에 날짜 매개 변수에 따라 DB에서 데이터를 선택하는 selectDuration() 메소드가 있습니다.

아아, 활동에서 변수 날짜를 전달하면 코드는 if(cursor.moveToFirst()) 범위에 도달하지 않습니다. 하지만 변수 값이 일반 문자열과 완전히 동일하기 때문에 왜 그런지 모르겠습니다.

public String selectDuration(String date) { 

    String duration = ""; 
    Integer value = 0; 
    String returnment = ""; 
    Log.i(TAG, "date to select: " + date); 
    Cursor cursor = this.db.query(TABLE_NAME, new String[] { "duration" }, 
      "date = ?", new String[] { date }, null, null, null); 

    if (cursor.moveToFirst()) { 
     do { 
      Log.i("SELECTDURATION", "inside cursor.moveToFirst()"); 
      duration = cursor.getString(0); 
      value += Integer.parseInt(duration); 

     } while (cursor.moveToNext()); 
     returnment = Integer.toString(value); 
    } 

    if (cursor != null && !cursor.isClosed()) { 
     cursor.close(); 
    } 
    Log.i(TAG, "valor do returnment: " + returnment); 
    return returnment; 
} 
+0

흠, 내가 쿼리의 내부에 문자열에 무슨 일이 일어나고 있는지 확실하지 않다 때문에 여기서 무슨 일이 일어나고 있는지 이야기하기 어려운(). 아마도 수동으로 SQL 쿼리를 생성하여 대신 rawQuery()에 전달할 것인가? 그런 다음 실행중인 정확한 명령문을 볼 수 있습니다. –

답변

1

오류를 발견했습니다. 방법은 setBasicContent()입니다. 여기에 새로운 방법이 수정

public void setBasicContent() { 

date = (mMonth + 1) + "/" + mDay + "/" + mYear + " "; 
hpdData = this.hpd.selectDuration(date); 
mDateDisplay.setText(hpdData); 

}

과 : 여기

오래된 방법이다

public void setBasicContent() { 

date = (mMonth + 1) + "/" + mDay + "/" + mYear; 
hpdData = this.hpd.selectDuration(date); 
mDateDisplay.setText(hpdData); 

}

문제는이 라인에 :

date = (mMonth + 1) + "/" + mDay + "/" + mYear + " "; 

빈 문자열이 연결되면 날짜와 문자열이 연결되어 있으므로 문자열에 빈 문자열이있는 문자열이 전달됩니다.이 문자열은 문자열에서 차이를 만듭니다. 따라서 다음과 같아야합니다.

date = (mMonth + 1) + "/" + mDay + "/" + mYear; 
0

데이터베이스 참조가 인스턴스화 된 경우라면 분명히 잘못된 코드는 표시되지 않습니다. 가능한 경우 date.toTime()의 밀리 초 값을 저장하여 날짜를 정수로 데이터베이스에 저장하십시오. 새 Date (밀리 초)에서 날짜 객체를 인스턴스화하는 것이 훨씬 쉽기 때문에 로켈에 따라 출력을 포맷 할 수 있습니다.