2016-01-22 153 views
2

我的應用程序工作正常,到目前爲止,但在某些設備上即時得到一個錯誤(安卓4.1或4.3爲例)無法打開數據庫

android.database.sqlite.SQLiteCantOpenDatabaseException: unknown error (code 14): Could not open database 
Caused by: 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:209) 
    at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:193) 
    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:804) 
    at android.database.sqlite.SQLiteDatabase.open(SQLiteDatabase.java:789) 
    at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:694) 
    at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:235) 
    at android.database.sqlite.SQLiteOpenHelper.getReadableDatabase(SQLiteOpenHelper.java:188) 

在類DBManager我有這樣的:

public class DBManager { 
    public DBHelper helper; 
    private SQLiteDatabase db; 
    private Cursor c; 

    public DBManager(Context context) { 
     helper = new DBHelper(context); 
     db = helper.getReadableDatabase(); 

     // db = helper.getWritableDatabase(); 
    } 

而且在DBHelper這樣的:

public class DBHelper extends SQLiteOpenHelper { 
     private static final String DATABASE_NAME = Environment.getExternalStorageDirectory() + "/database/database.db3"; 
private static final int DATABASE_VERSION = 3; 

public DBHelper(Context context) { 
     super(context, DATABASE_NAME, null, DATABASE_VERSION); 
    } 

    @Override 
    public void onCreate(SQLiteDatabase db) { 
     db.execSQL(CREATE_TABLE_SQL); 

    } 

清單等,是確定,但我不明白爲什麼有些設備上SQLiteCantOpenData baseException來了。我希望有人能幫我解決這個問題? Thanx提前

+2

你爲什麼不發佈任何代碼?你如何會得到幫助 – meda

+0

檢查這http://stackoverflow.com/questions/17034511/android-database-sqlite-sqlitecantopendatabaseexception-unknown-error-code-14 – hehe

+0

太快了:)現在我已經添加的代碼:) – Frank

回答

0

要設置DATABASE_NAME在由Environment.getExternalStorageDirectory()返回目錄根的路徑。

引述文檔getExternalStorageDirectory()

此目錄目前可能不會被訪問,如果它已經通過他們的計算機上的用戶安裝 ,已經從設備中刪除,或 一些其他的問題有發生了。

如果您確實不需要指定數據庫文件的位置,則應該指定文件名(例如「MyDB」),Android框架將爲您確定合適的路徑。

[增訂]

通常,DB(其可含有非常重要的數據,並且甚至可能包含敏感用戶信息)沒有被存儲在外部存儲,因爲:

  1. 該文件將是由用戶提供給其他應用和
  2. 該文件可以被意外損壞/刪除。

如果要創建DB的備份副本(並將其放入外部存儲),請參閱this answer

+0

嗨,是的,但我的意圖是存儲它與getExternalStorageDirectory()例如in /storage/emulated/0/database/databes.db3 ...因爲用戶每次都可以從這個數據庫進行備份。也許我會猜想在某些設備上發生錯誤,因爲創建數據庫時路徑不存在? – Frank

+0

查看我更新的答案。 – cybersam