안드로이드 SQLite select count(*) 을 getCount()로 가져올때의 커서(Cursor)의 개념

 
반응형
sql을 접한지도 꽤 오래도있는데,
android 를 하면서 sqlite를 오늘 처음으로 사용을 해보면서 삽질을...

즐겨찾기 기능을 구현하는데, 대학교때 헤메던것을 지금 다시 헤매이고 있다...-_-;;

대학교 4학년때 처음 sql을 하다가 커서가 뭔지 처음에는 좀 헷갈렸는데,
일반적으로 sql문으로 select 를 해서 값이 없거나, 값이 하나만 나온다면 커서가 필요없지만,
여러값이 넘어올때는 커서에 자료를 담아두고 한건씩 처리를 하는 방식

select 이름 from 직원테이블 where 주민번호 = '11111';

이런식이라면 보통 없거나, 한건만 넘어온다.

select 이름 from 직원테이블 where 부서 = '총무과'

이런 경우라면 없거나, 한건이 있거나, 여러건이 있을수도 있으므로, 당연히 커서로 처리를 해주어야 한다.

mDatabase = openOrCreateDatabase("culture.db",
    SQLiteDatabase.CREATE_IF_NECESSARY, null);
mDatabase.setLocale(Locale.getDefault());
mDatabase.setLockingEnabled(true);
mDatabase.setVersion(3);

Cursor c = mDatabase.rawQuery("select count(*) from culture "
    + "where id=?;", new String[] { cultCode });
System.out.println(cultCode + "즐겨찾기 카운터 :" + c.getCount());

if (c.getCount() == 1) {
    favBtn.setChecked(true);
}
else {
    favBtn.setChecked(false);
}
mDatabase.close();

위의 코드를 가지고 한참을 얼빵하게 헤맸다는....-_-;;

count(*) 이라는것을 쓰면 해당건이 몇건인지를 리턴해준다.
그러므로 select에서 count를 사용하면 c.getCount() 는 언제나 1이 나올수 밖에 없다는...-_-;;

c.getCount() 로 해당 자료가 있는지 없는지를 제대로 알려면 count(*), count(칼럼명) 이 아닌,
select * from 으로 교체를 해야 하거나,
넘겨받은 커서의 데이터가 0인지, 1인지를 판별해야 한다는 아주 기본적인 이야기...-_-;;


파워빌더(powerbuilder) 같은  4gl 개발툴만 사용하다가 이렇게 날로 코딩을 하면서

좀 생소한 화면에 엉뚱한것을 가지고 헤맨듯...-_-;;
반응형