안드로이드 개발 질문/답변
(글 수 45,052)
cursor = db.rawQuery("SELECT * FROM list", null); //list (_id, Message, Date) startManagingCursor(cursor); Adapter = new SimpleCursorAdapter(this, android.R.layout.simple_list_item_1, cursor, new String[] { "Date" }, new int[] {android.R.id.text1}); _ListView.setAdapter(Adapter);
위처럼 list 테이블의 모든것을 select 해주고 new String[] { "Date" } <- 이부분에 Date나 Message를 해주면
리스트뷰에 해당 정보가 잘 나오는데 cursor = db.rawQuery("SELECT Date FROM list", null); 해주면
에뮬레이터에서 오류가 나는 이유를 알고 싶어 질문 드립니다
제가 근본적으로 하고 싶은건 Date에서 중복되지 않는 달만 뽑아내고 싶어서
cursor = db.rawQuery("SELECT DISTINCT strftime('%m', Date) FROM list", null); 이렇게 해주고 아답터 부분은
Adapter = new SimpleCursorAdapter(this,
android.R.layout.simple_list_item_1,
cursor, new String[] { "strftime('%m', Date)" },
new int[] {android.R.id.text1});
_ListView.setAdapter(Adapter);
이렇게 선언해주었는데 에러가 나서 이것저것 해보니 위처럼 해도 안되서요
2010.09.19 15:15:14
방금 Cursor = db.rawQuery("SELECT _id,DISTINCT strftime('%m', Date) FROM list",null); 로 바꿔주고
아답터부분에서 "Date"부분을 "strftime('%m', Date)" 로 바꿔주었는데 에러가 나네요 ㅠ
2010.09.19 15:19:39
SELECT min(_id) as _id, DateMon FROM (SELECT _id, strftime('%m', Date) as DateMon FROM list) GROUP BY DateMon
대충 이런식의 쿼리가 더 맞을지도 모르겠군요...
물론 adapter에서는 DateMon으로 쓰고요...
2010.09.19 15:23:46
우선 에러는 안나구요 ^^
현재 09월 데이터가 2개 있거든요 09 이렇게 하나만 뜨게 해야하는데 strftime('%m', Date)앞에도 DISTINCT해줬는데 에러나네요
2010.09.19 15:27:27
하지 않아도 되긴 하는데... 보통 symbol을 매칭하는 형식을 쓰기 때문에...
쉽게 바꿔서 쓰는게 낫죠... 그게 오류 확률도 줄이구요...
일단은 _id Column이 없으면 CursorAdapter를 쓸수 없을겁니다.
sqlite에서 rownum을 메길수 있는데요...
지금 쓰시는 쿼리 같은 경우
rownum을 추가시키고 그것을 _id로 이름짓고 쓰시면 됩니다.
그리고 sql에서 함수 쓰시고 나서 항상 as 를 붙여서 별도의 이름을 쓰시는게 좋습니다.