我有一個可運行的應用程序,它使用數據庫和SQLiteAssetHelper。數據庫文件(sql.sqlite)被壓縮(sql.sqlite.zip)並放入資產/數據庫文件夾中。未知錯誤(代碼14):無法打開數據庫
該程序工作得很好。當運行一秒/三分之一/四分之一時間時,它會很快啓動。但如果我做一個「強制停止」後面跟着一個「清除數據」然後再運行它,然後當我運行它(查看日誌)時,我看到一個錯誤「未知錯誤(代碼14):無法打開數據庫」...但後來我等了幾秒鐘,所有加載和完美的作品。
的日誌如下:
W/SQLiteAssetHelper(18393): could not open database SQL.sqlite - unknown error (code 14): Could not open database
W/SQLiteAssetHelper(18393): copying database from assets...
W/SQLiteAssetHelper(18393): extracting file: 'sql.sqlite'...
W/SQLiteAssetHelper(18393): database copy complete
I/SQLiteAssetHelper(18393): successfully opened database SQL.sqlite
所以它看起來像它在某種程度上試圖找到數據庫,失敗,崩潰,然後修復本身。所以我的問題是,我怎麼能避免笨拙的開始和幾秒鐘的延遲?
編輯:我的第一個參考數據庫,在我的代碼是...
public class Globals extends Application
{
Custom_SQLiteAssetHelper db;
public void onCreate()
{
super.onCreate();
db = new Custom_SQLiteAssetHelper(this);
cursor = db.get_first_species_common_name();
,我有...
public class Custom_SQLiteAssetHelper extends SQLiteAssetHelper
{
public Custom_SQLiteAssetHelper(Context context)
{
super(context, "SQL.sqlite", null, 1);
}
public Cursor get_first_species_common_name()
{
SQLiteDatabase db = getReadableDatabase();
SQLiteQueryBuilder querything = new SQLiteQueryBuilder();
// etc...
這個過程就像你試圖首先訪問數據庫(有錯誤),然後你創建它並再次訪問它。猜猜你需要重新安排你做到這一點的方式。 – LightYearsBehind
查看編輯OP ...也許這會更清晰。 – Mick
您可以嘗試使用Context.getDatabasePath(dbName).exists()來確定您的數據庫是否已經存在。至於延遲的秒數,我相信它是因爲你有一個大型的數據庫,它需要時間來解壓縮和複製。如果是因爲解壓縮,請不要從頭開始壓縮。如果需要花費時間進行復制,請增加每次複製操作的字節數。 – LightYearsBehind