안드로이드 개발 질문/답변
(글 수 45,052)
안녕하세요..ㅜㅜ
안드로이드 공부하는 초보입니다..
다름이아니라 아주 기초적인거 질문좀드리려구요
제가 지금 데이터베이스쪽 공부를하고있는데요...
이것저것 많은 예제를 보고 책도 봤는데요..
전부다 그 클래스 내에서 db를 생성하고 내용을 입력해서 출력하는 예제만 있더라구요...
제가 하고싶은건 기존의 db파일을 만들고
그파일을 오픈 시키고싶은데요..
일단 db파일을 만들고 그걸 asset폴더안에 넣었습니다.
이때 이걸 오픈하고싶은데요...
제가 문제풀이 어플을 하나 만드려구하는데요
.db파일로 문제들을 집어넣고 그 문제들을 하나하나 꺼내고 싶은데...
일단은 외부에서 생성된 db파일을 오픈하는 법을 알고싶습니다.....
부탁드립니다.ㅜㅜ




asset폴더에 넣는것은 apk용량을 늘리게 되서 추천하지 않는 방식이지만 사용하시겠다면 asset폴더내부의 db파일에 다이렉트로 접근은
불가능합니다. 기본적으로 해당 asset내부db를 안드로이드 시스템 내부에 카피를 하고 카피된 데이터를 가지고 처리를 해야됩니다.
구현방식은 전에 사용했던게 있는데 참고 되시길 바랍니다.
try { File folder = new File("/data/data/test.test/databases/"); folder.mkdirs(); File outfile = new File("/data/data/test.test/databases/test.db"); outfile.createNewFile(); AssetManager assetManager = getResources().getAssets(); InputStream is;is = assetManager.open( "databases/test.db", AssetManager.ACCESS_BUFFER); long filesize = is.available();// 패키지 폴더에 설치된 DB파일이 포함된 DB파일 보다 크기가 작을 경우 DB파일을 덮어 쓴다. if(outfile.length() < filesize){ byte[] tempdata = new byte[(int) filesize]; is.read(tempdata); is.close(); outfile.createNewFile(); FileOutputStream fo = new FileOutputStream(outfile); fo.write(tempdata); fo.close(); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }asset폴더 내부 db저장형식으로 실제 어플을 제작했는데 한번쓴후론 결국 웹다운을 사용하게 되더군요.
이렇게 복사하셨으면
SQLiteDatabase test = openOrCreateDatabase("test.db", Context.MODE_PRIVATE, null)를 통해서 접근하시면 됩니다.