본문 바로가기

프로그래밍/Android 짜투리 지식

[android] db asset경로에서 참조하기

외부 database를 참조하고 싶을때, 어떻게 해야할까.

기본적으로 database를 생성하면, package에 포함되 버려서 database를 열람하지 못한다. (emulator에서는 explorer로 볼수 있다. 하지만 폰에서는 확인하지 못한다.)


DATABASE 운용이 잘 되는 개발자라면, 별 어려움을 못느끼겠지만... 그런사람이 얼마나 될까.

그래서 내부 database를 외부로 빼내서, sqlite browser나 파이어폭스 sqlite manager로 보고싶다.


	public static final String PACKAGE_DIR = "/data/data/com.mob.package/";
	public static final String DATABASE_NAME = "db/testdb.sqlite";
	public static final String COPY2DATABASE_NAME = "testdb.sqlite";
                
 public void doCopy() {

	// check
	File folder = new File(PACKAGE_DIR + "databases");
	folder.mkdirs();
	File outfile = new File(PACKAGE_DIR + "databases/" + COPY2DATABASE_NAME);
	outfile.delete();
	if (outfile.length() <= 0) {
		AssetManager assetManager = getResources().getAssets();
		try {
			InputStream is = assetManager.open(DATABASE_NAME, AssetManager.ACCESS_BUFFER);
			long filesize = is.available();
			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) {
		         	e.printStackTrace();
			}
		}
	}
}