2017-09-09 16 views
0

새 Android 앱에서 Sqlite3 데이터베이스를 열 수 없습니다. 문제를 해결하기 위해 새로운 앱을 만들었습니다. main 아래의 Assets 폴더에 sqlite3 db를 넣었습니다. 매니페스트에서 Android에서 sqlite 데이터베이스를 열 수 없습니다.

, 나는 다음 줄을 배치 :

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> 

나는이 테스트 응용 프로그램에서 하나 개의 활동이, 이것은 그 활동 코드입니다. 그것은 단지 한 가지를합니다 : attempts to open the db.

09-09 20:10:54.788 9850-9850/? E/SQLiteLog: (14) cannot open file at line 31278 of [2ef4f3a5b1] 
09-09 20:10:54.788 9850-9850/? E/SQLiteLog: (14) os_unix.c:31278: (2) open(/data/user/0/com.hawthornemackenzie.sesame/databases/production.sqlite3) - 
09-09 20:10:54.788 9850-9850/? E/SQLiteDatabase: Failed to open database '/data/user/0/com.hawthornemackenzie.sesame/databases/production.sqlite3'. 
               android.database.sqlite.SQLiteCantOpenDatabaseException: unknown error (code 14): Could not open database 

그것은 getDatabasePath에서 유효한 경로를 받고있는 것으로 보인다 즉시 사망하고 콘솔에 오류를 출력합니다 (더 자세한 내용은 아래 참조) 여기

public class MainActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     Context context = getApplicationContext(); 
     String db_path = String.valueOf(context.getDatabasePath("production.sqlite3")); 

     SQLiteDatabase db = SQLiteDatabase.openDatabase(db_path, null, SQLiteDatabase.OPEN_READWRITE); 

    } 
} 

로그에서 관련 오류가 있습니다 전화하지만 파일이 존재하지 않는다고 말하는 것 같습니다.

+0

파일이 존재하지만 잘못입니다 ... '파일을 열 수 없습니다를 line'에서 ...이 암호화되어 있습니까? –

+0

이 라이브러리를 사용해 보셨습니까? https://github.com/jgilfelt/android-sqlite-asset-helper –

+0

아니요, 암호화되지 않았습니다. 확실히, 저는 실제로 다른 프로젝트에서 적극적으로 사용하는 파일의 복사본을 사용했습니다. 즉, IDE의 자산 폴더에 복사 붙여 넣기를 사용하여 원시 파일 시스템 내에서 옮깁니다. 내가 그랬을 때, 텍스트가 아니기 때문에 UTF-8 파일이 아니라는 것은 놀라운 일이 아니라는 메시지를 받았습니다. 그러나 파일을 자산으로 옮기는 더 좋은 방법이 있습니까? – hawmack13

답변

1

로그를 읽는다면 경로를 얻지 만 명시 적으로 데이터베이스를 앱의 개인 데이터 폴더에 복사하지 않으면 열 수 없습니다.

자산은 읽기 전용이므로 데이터베이스를 열어도 SELECT 문만 사용할 수 있습니다.

은 참조 : Reading sqlite file from asset folder