안녕하세요.
현재(2.1 버전) SQLite Manager를 이용해서 aadb.sqlite를 생성 후 /data/data/패키지명/databases/
아래에 넣은 후 폰에 있는 db를 연결해서 사용을 하고 있습니다.
그런데 aadb.sqlite 용량이 작으면 문제가 없는데..
1. 폰에서 실행할 때 용량이 크면 폰에 저장이 되지 않고 에러가 발생하면서 강제 종료를 시킵니다.
2. 에뮬레이터에서 실행 할 때는 쿼리는 가져오지만 아래와 같은 에러 메세지를 뿌립니다.
06-28 06:52:32.352: E/CursorWindow(2132): need to grow: mSize = 1048576, size = 27, freeSpace() = 16, numRows = 20687
06-28 06:52:32.352: E/CursorWindow(2132): not growing since there are already 20687 row(s), max size 1048576
06-28 06:52:32.352: E/CursorWindow(2132): The row failed, so back out the new row accounting from allocRowSlot 20686
06-28 06:52:32.352: E/Cursor(2132): Failed allocating fieldDir at startPos 0 row 20686
aadb.sqlite 파일 용량이 큰 경우 사용을 못하고
create table로 테이블을 만들고 .db파일을 여러개 만들어서 폰에 넣어줘야 하나요?
폰의 db용량을 늘려준다거나 하는 방법은 없을까요?
폰에 있는 db를 사용할 때 어떻게들 사용 하시는지 궁금합니다!
위 에러는 한번에 너무 많은 row를 하나의 cursor 로 읽으려고 해서 나오는 것이랍니다.
cursor도 메모리에 버퍼를 만들어서 읽어오는 것인데,
너무 많이 요청하니까 버퍼 비우고 다음번부터 다시 읽어 오는 작업을 한다는 것인데요.
이게 용어가 있는지 모르지만, corsor를 reset하는 작업이라고 개인적으로 부르고 있지요.
아무튼 작업도 시간이 많이 걸려서 이 과정중에 터치 계속하면 ANR 나오고 APP 죽을거에요.
기획은 바꾸셔서 한번에 다량의 데이타 가져오는 것을 바꾸시는 것이 좋을 것입니다.




assets 폴더에 DB 를 넣으셨다면 1M 이상은 들어가질 않을 겁니다.
이때는 우회적으로 DB 이름을 aadb.mp3 로 넣으시면 들어갑니다.
이를 다시 ~~/databases/ 폴더에 넣으시고 사용하시면 됩니다.
~~/databases/ 폴더에 있는 DB 용량도 각 폰이 지원하는 heap memory 에 따라서 초과시 에러가 날 수 있습니다.
sqlite 자체가 대용량을 다루기 위해 만들어진 것이 아니니까요...