2012-01-16 77 views
1

我開發了一個應用程序,它可以訪問設備中的數據庫;但是,我不知道現在不能查看在數據庫中執行這樣的代碼行:CREATE TABLE android_metadata失敗

this.productoHelper.getWritableDatabase(); 

這是我的異常堆棧跟蹤:

01-16 19:20:04.629: E/Database(17236): CREATE TABLE android_metadata failed 
01-16 19:20:04.639: E/Database(17236): Failed to setLocale() when constructing, closing the database 
01-16 19:20:04.639: E/Database(17236): android.database.sqlite.SQLiteDatabaseCorruptException: database disk image is malformed 
01-16 19:20:04.639: E/Database(17236): at android.database.sqlite.SQLiteDatabase.native_setLocale(Native Method) 
01-16 19:20:04.639: E/Database(17236): at android.database.sqlite.SQLiteDatabase.setLocale(SQLiteDatabase.java:1987) 
01-16 19:20:04.639: E/Database(17236): at android.database.sqlite.SQLiteDatabase.<init>(SQLiteDatabase.java:1855) 
01-16 19:20:04.639: E/Database(17236): at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:820) 
01-16 19:20:04.639: E/Database(17236): at android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:854) 
01-16 19:20:04.639: E/Database(17236): at android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:847) 
01-16 19:20:04.639: E/Database(17236): at android.app.ContextImpl.openOrCreateDatabase(ContextImpl.java:550) 
01-16 19:20:04.639: E/Database(17236): at android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:203) 
01-16 19:20:04.639: E/Database(17236): at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:118) 
01-16 19:20:04.639: E/Database(17236): at android.database.sqlite.SQLiteOpenHelper.getReadableDatabase(SQLiteOpenHelper.java:187) 

順便說一句!當我嘗試從Eclipse Emulator執行此操作時,它運行正常,但不在設備中。

+1

你的應用程序創建數據庫,或運送預製一個與應用? – 2012-01-16 18:55:36

+0

嘗試使用adb來卸載並重新安裝。我在安裝應用程序的更高版本時遇到了舊文件遺留問題,從未更新的問題。 – JustinDanielson 2012-01-16 19:05:06

+0

我認爲助手類的onCreate被稱爲recursivly(getWritableDatabase從的onCreate(幫手)以某種方式調用),但我只能猜測 – Selvin 2012-01-16 19:13:02

回答

0

嘗試打開數據庫之前使用SQLiteDatabase.NO_LOCALIZED_COLLATORS

+0

真是我的問題是,現在我無法從我的供應商類 打開我的數據庫'公共光標查詢(URI URI,字符串[]投影,字符串的選擇, \t \t \t的String [] selectionArgs兩個,字符串中將sortOrder){\t 私人ProductoSqliteHelper ProductoHelper; \t \t \t \t \t SQLiteDatabase db = this.productoHelper.getWritableDatabase(); ... ' 它現在與我所有的提供者類一起發生,但我不知道爲什麼。我已經檢查過我的數據庫是否已經創建並且是正確的! :_( – vicmonmena 2012-01-17 08:17:18

+0

Thanx @hovanessyan但我沒有解決我的問題;但是,我認爲我沒有正確使用。使用SQLiteDatabase.openDatabase(... SQLiteDatabase.NO_LOCALIZED_COLLATORS)的筆數據庫的過程是什麼? – vicmonmena 2012-01-17 15:03:10

0

你只需要使用SQLiteDatabase.NO_LOCALIZED_COLLATORS標誌調用SQLiteDatabase.openDatabase時()

+0

嗨! 這是我在幫助和提供者類的代碼,它有百達拼命地跑,但現在它不運行(在設備,而不是在仿真器)。 '公共ProductoSqliteHelper(上下文的背景下,字符串名稱, \t CursorFactory工廠,INT版本){ 超級(上下文中,名稱,工廠,版本); // TODO自動生成構造存根 } @Override 公共無效的onCreate(SQLiteDatab ASE DB){ \t嘗試{ \t \t //db.execSQL(sqlCreate); \t}趕上(的SQLException E){ \t \t e.printStackTrace(); \t} }' – vicmonmena 2012-01-17 08:04:43

+0

@hovanessyan爲什麼問你關於我的數據庫的名字嗎?我還沒有工作!我繼續在我的設備上運行我的應用程序時遇到同樣的錯誤。 – vicmonmena 2012-01-17 15:59:23

+0

它不適用於版本2.3.3的Android設備 – 2012-09-26 10:53:23