현재 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)