디비에서 데이터를 불러오는데 이런식으로 불러옵니다.
while(c.moveToNext(){
A a = new A();
a.int_val = c.getInt(id_intval);
a.str_val = c.getString(id_strval);
a.my_val = getMyDb(c.getInt(id_myval));
.
.
.
aList.add(a);
}
c.close();
위와같이 불러옵니다. int나 string 형태의 기본형 데이터도 가져오지만 key 값으로
다른 테이블을 조회해(그 안에서 또 Cursor가 열리고 닫히 겠죠) 데이터를 담는 getMyDb()같은 부분도 있습니다.
헌데 이게 일정 텀을 두고 호출 될땐 아무 문제가 없는데 짧은 시간에 꽤 많은 횟수가 호출 되면
아래와 같은 로그를 찍으면서 쿼리에 실패합니다.
Could not allocate CursorWindow 'my_database.sqlite' of size 2097152 due to error -12.
확인 해보니 getMyDb() 함수 부분에서 호출 되는데 반복문 안에서, 그러니까 Cursor가 열려있는 상태에서 또다른 커서를 수업이 여는 것이 문제가 되는 걸까요? 다 확인 해봐도 Cursor는 사용후 항상 close() 함수를 호출 해주도록 되어 있습니다.