2017-09-09 74 views
0

我無法在我的新Android應用程序上打開Sqlite3數據庫。爲了解決問題,我創建了一個全新的應用程序。我把sqlite3數據庫放在Assets文件夾下。無法在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。它立刻死亡,並打印出一個錯誤控制檯(細節下文)

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); 

    } 
} 

下面是從日誌相關的錯誤:

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得到一個有效的路徑通話,但似乎是說該文件不存在。

+0

該文件存在,但畸形...'無法打開文件在line' ...是加密的? –

+0

你有試過這個圖書館嗎? https://github.com/jgilfelt/android-sqlite-asset-helper –

+0

不,沒有加密。可以肯定的是,我實際上使用了一個我在另一個項目中積極使用的文件副本。也就是說,我使用複製粘貼將其放入IDE的資產文件夾中,並將其移到本機文件系統中。當我這樣做時,我收到一條消息,說它不是一個UTF-8文件,這並不奇怪,因爲它不是文本。但是有沒有更好的方法將文件轉移到資產中? – hawmack13

回答

1

如果您閱讀日誌,它會得到路徑,但除非您明確將數據庫複製到應用程序的私人數據文件夾中,否則無法打開它。

另外值得一提的是資產是隻讀的,所以即使它可以打開數據庫,您也只能使用SELECT語句。

參見:Reading sqlite file from asset folder