2011-04-13 6 views
1

내 응용 프로그램에 사용자가 데이터베이스에 레코드를 입력했습니다. 레코드에는 자동 증가 ID, 날짜 (mm-dd-yyyy 형식의 텍스트), 수량 (int) 및 기타 몇 가지 필드가 포함됩니다.커서에 액세스 할 때의 예외

저는 매달 모든 달과 합계 금액을 매달려고합니다. 그래서 내가 좋아하는 내 응용 프로그램에 표시 할 수 있음 : 2010년 12월 - 90qty 월 2010 -

내가 그렇게이 쿼리를 사용하고 45qty ... :

return mDb.query("record", new String[] {KEY_ROWID, "strftime('%m-%Y', date)", "sum(quantity)"}, null, null, "strftime('%m-%Y', date)", null, null); 

나는 쿼리가 좋은 생각 커서에 액세스 할 때 예외가 발생합니다. 그것은 '날짜'가 열이 아니라고 말합니다. [date]의 이름을 [dateA]로 바꾸면 'dateA'가 열이 아니므로 문제가 좁혀집니다.

Cursor c = mDbHelper.fetchReport(); 
    String[] from = new String[] { "date", "quantity" }; 
     int[] to = new int[] { R.id.text1, R.id.text2 }; 

     setListAdapter(new SimpleCursorAdapter(this, R.layout.basicrow, c, from, to) { 
} 

아이디어가 있으십니까?

업데이트 : select strftime ('% m- % Y', 날짜), 레코드 합계 (수량)을 수행 할 때; adb 쉘에서, ": 94"를 반환합니다. 수량은 거기에 있습니다 (그러나 모든 날짜에 대해). 그러나 날짜는 아닙니다.

입력 할 때 strftime (date) from record를 선택하면 모든 날짜 (이 테스트 케이스에서는 3)가 반환됩니다. 입력 할 때 레코드에서 strftime ('% m- % Y', date)을 선택하면 3 개의 빈 행이 반환됩니다.

+0

SqliteDatabaseHelper 코드를 게시 할 수 있습니까? – James

+0

이것을 알아 냈습니까? 나는 지금이 같은 문제를 겪고있다. – Kalina

답변

1

다음과 같은 현상이 발생합니다. 여기 (간체) 쿼리입니다 :

select strftime('%m-%Y', date) from record 

당신은 하지 선택 날짜 열을; 열을 매개 변수로 사용하는 함수를 선택합니다. 이러한 경우 데이터베이스는 결과 집합의 열을 같은

STRFTIME_ 
05-2005 
08-2009 

보시다시피, 날짜 열이 (오류가 말한다처럼) 결과 집합에 존재하지 않는 어떤 임의의 이름을 지정합니다. 당신이 시도 할 필요가 무엇

은 다음과 같습니다

select strftime('%m-%Y', date) as date from record 

또는

select strftime('%m-%Y', date) as formatted_date from record 

및 결과 집합의 열을 참조하는 '날짜'또는 'FORMATTED_DATE'를 사용

.

P. 기록에서

선택의 strftime ('% M- %의 Y', 날짜), 그것은 다른 문제가 될 수있는 3 빈 행

이를 반환합니다. indded date가 텍스트로 저장되면 strftime() 함수는 형식을 지정하는 방법을 알 수 없습니다.

+0

그 중 하나를 시도하면 빈 행의 결과가 반환됩니다. 열에 4 개의 날짜가 있고 빈 행 4 개가 반환됩니다. – Roger

+0

날짜 필드의 데이터 유형은 무엇입니까? 당신이 말한대로 정말 텍스트입니까? 그러면 결과는 다소 예측 가능합니다. strftime은 문자열이 아닌 DATE 유형으로 작동합니다. –

관련 문제