본문 바로가기
Programing/android

[android studio] 초기 db파일을 생성 후 앱실행시 설치하

by Benedictus711 2021. 10. 20.
728x90

앱 생성 중에 매번 앱 실행시에 db파일을 읽어와야 할 필요가 없고
초기 설치시에만 필요할 경우 먼저 DB를 생성 해 놓고 해당 DB를 앱에 설치할 수 있는
방법이 있어 해당 방법을 사용해 본다.

우선, SQLite DB Browser를 설치하여 새 DB를 만들어 줘야 한다.
설치는 아래 사이트에서 다운 받아 설치가 가능하다.

SQLite 사이트
https://sqlitebrowser.org/dl/
 

Downloads - DB Browser for SQLite

(Please consider sponsoring us on Patreon 😄) Windows Our latest release (3.12.2) for Windows: Windows PortableApp Note - If for any reason the standard Windows release does not work (e.g. gives an error), try a nightly build (below). Nightly builds ofte

sqlitebrowser.org

 

설치 이후 아래와 같이 DB Browser를 띄워 새 데이터베이스 버튼을 클릭하여 새데이터베이스 이름을
지정해 준뒤, 새 DB가 생성되면 초기데이터를 만들어줄 테이블을 생성해 주어야 된다.

 

DB가 만들어진 후 활성화 되는 [테이블생성하기] 버튼을 클릭하여 
필드명과 타입, 각각 칼럼의 속성을 지정해 준뒤 데이터보기로 가면 해당 테이블의 값을 넣을 수 있다.
다 만들어진 이후 저장하기 메뉴로 해당 DB데이터를 저장해 준다. 저장해 둔 폴더를 기억해 두자.

이제 DB파일을 android studio에서 삽입 후 앱 동작시에 해당 파일이 앱DB로 복사되어 사용 가능하도록
만들어 주면 된다.

Android Studio에서 아래와 같이 assets 폴더를 만들어 주고 방금만든 DB파일을 해당 폴더에 복사해서 넣어준다.

 

이제 DB파일을 넣어주었으니, 해당 파일을 앱 동작시에 앱의 DB쪽으로 복사해주면 된다.
해당 복사하는 코드는 아래와 같이 사용하면 된다.

static public void copyDatabase(Context context) {
        String DB_PATH = "/data/data/" + context.getPackageName() + "/databases/";

        try {
            // 디렉토리가 없으면, 디렉토리를 먼저 생성한다.
            File fDir = new File(DB_PATH);
            if (!fDir.exists()) {
                fDir.mkdir();
            }

            String strOutFile = DB_PATH + dbNm;
            InputStream inputStream = context.getAssets().open(dbNm);
            OutputStream outputStream = new FileOutputStream(strOutFile);

            byte[] mBuffer = new byte[1024];
            int mLength;
            while ((mLength = inputStream.read(mBuffer)) > 0) {
                outputStream.write(mBuffer, 0, mLength);
            }

            outputStream.flush();
            outputStream.close();
            inputStream.close();

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

 

해당 코드는 앱 동작시에 사용하는 Activity 에서 사용한 것이 아니고 별도의 아답터를 만들어 해당 Method를 호출한
것이므로, 사용하는 위치에 맞게 수정하여 사용하면 될 것같다.

코드상 [dbNm]은 해당 DB명칭이고 파일명칭과 같게 만들면 된다.
inputStream에 이미 만들어 놓은 파일을 담고 해당 파일을 Buffer단위로 쪼개서 OutputStream에 설정한 경로에
파일을 만들어 옮겨 담는 것이다.

해당 코드로 완료 후 Device File Explorer로 확인 결과 잘 복사되어 들어가는 것을 확인 하였다.

728x90

댓글