마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

Sqlite DB 외부 SD카드 생성 질문입니다.

0 추천

현재 Sqlite를 이요해 DB생성하는 것을 공부하고 있습니다. 내부저장소에는 루팅 없이 접근이 불가하여 SD카드를 구매하여 끼웠습니다. 그런데 DB 경로 지정에 있어서 아래와 같이 지정하였더니 /storage/emulated/0 이쪽으로 저장되더군요. 이 경로는 탈착식 SD카드 경로가 아닌 내부저장소안의 외부저장소(?)로 지정이 되어 원하는 경로에 넣는 것은 실패하였습니다.

private static final String FILE_PATH = Environment.getExternalStorageDirectory().getAbsolutePath()
 + File.separator + "DB_name"

그래서 구글링 결과 외부 탈착식 SD카드의 경로를 알아내어 /mnt/media_rw/external_SD 이라는 실제 끼운

private static final String FILE_PATH = "/mnt/media_rw/external_SD" +
 File.separator + "DB_name";

SD카드의 경로를 알아냈습니다. 하지만 이 경로로 지정하여 DB생성을 하니 오류가 납니다.. 아래는 로그캣입니다. 휴대폰 기종은 LG G2, 안드로이드 버전은 5.0.1 입니다.

02-26 19:54:27.135 18591-18591/com.example.bh.dbexample E/SQLiteDatabase: Failed to open database '/mnt/media_rw/external_SD/Food.db'.
  android.database.sqlite.SQLiteCantOpenDatabaseException: unknown error (code 14): Could not open database
                at android.database.sqlite.SQLiteConnection.nativeOpen(Native Method)
                at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:212)
                at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:196)
                at android.database.sqlite.SQLiteConnectionPool.openConnectionLocked(SQLiteConnectionPool.java:463)
                at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:185)
                at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:177)
                at android.database.sqlite.SQLiteDatabase.openInner(SQLiteDatabase.java:907)
                at android.database.sqlite.SQLiteDatabase.open(SQLiteDatabase.java:892)
                at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:795)
                at android.app.ContextImpl.openOrCreateDatabase(ContextImpl.java:1241)
                at android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:267)
                at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:223)
                at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:163)
                at com.example.bh.dbexample.DBManager.insert(DBManager.java:31)
                at com.example.bh.dbexample.MainActivity$1.onClick(MainActivity.java:59)
                at android.view.View.performClick(View.java:4764)
                at android.view.View$PerformClick.run(View.java:19835)
                at android.os.Handler.handleCallback(Handler.java:739)
                at android.os.Handler.dispatchMessage(Handler.java:95)
                at android.os.Looper.loop(Looper.java:135)
                at android.app.ActivityThread.main(ActivityThread.java:5292)
                at java.lang.reflect.Method.invoke(Native Method)
                at java.lang.reflect.Method.invoke(Method.java:372)
                at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:908)
                at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:703)

 

안드로이드초보입문 (220 포인트) 님이 2016년 2월 26일 질문
안드로이드초보입문님이 2016년 2월 26일 수정

1개의 답변

0 추천
1. Environment.getExternalStorageDirectory() 이 리턴하는 경로는 PC에서도 볼 수 있습니다. 그냥 PC로 db 파일을 복사하여 확인하면 됩니다.

2. 별도로 장착한 SD카드 경로는 기기마다 다릅니다. 사용하는 기기의 경로가 무었인지 확인해보세요.
익명사용자 님이 2016년 2월 27일 답변
...