2010-08-06 59 views
2

我創建了一個sqlite數據庫來存儲我正在開發的媒體播放器的播放列表,因爲擴展功能(而不是使用內容提供商)。它完美的1.6模擬器,但在功能界別任何高於2.0?發生了什麼變化,我需要了解儘可能在SDK打開數據庫2.0+?這是logcat。SQLite問題 - 完美工作在1.6模擬器 - 無法在手機(2.2)或2.0+模擬器上工作

08-06 19:05:46.365:INFO/SQLiteDatabaseAdapter(4692):DB(playlists.db)copied! 08-06 19:05:46.373:INFO/SQLiteDatabaseAdapter(4692):嘗試創建數據庫實例(playlists.db) 08-06 19:05:46.373:INFO/SQLiteDatabaseAdapter(4692):創建或打開數據庫: playlists.db 08-06 19:05:46.389:信息/ SQLiteDatabaseAdapter(4692):(playlists.db)創建的數據庫實例! 08-06 19:05:46.389:信息/數據庫(4692):sqlite返回:錯誤代碼= 1,msg =沒有這樣的表格:播放列表 08-06 19:05:46.397:DEBUG/AndroidRuntime(4692):關閉(4692):threadid = 1:線程以未捕獲的異常退出(group = 0x4001d7e0) 08-06 19:05:46.514:ERROR/AndroidRuntime(4692):致命例外:主 08-06 19:05:46.514:錯誤/ AndroidRuntime(4692):java.lang.RuntimeException:無法啓動活動ComponentInfo {com.androidworkz.andamp/com.androidworkz.andamp.andAMP}:android。 database.sqlite.SQLiteException:沒有這樣的表:播放列表:,在編譯:SELECT *播放列表從播放列表中ORDER BY ID ASC; 08-06 19:05:46.514:ERROR/AndroidRuntime(4692):at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663) 08-06 19:05:46.514:ERROR/AndroidRuntime(4692):at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679) 08-06 19:05:46.514:ERROR/AndroidRuntime(4692):at android.app.ActivityThread.access $ 2300(ActivityThread.java:125) 08- 06 19:05:46.514:錯誤/ AndroidRuntime(4692):在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:2033) 08-06 19:05:46.514:錯誤/ AndroidRuntime(4692):在android .os.Handler.dispatchMessage(Handler.java:99) 08-06 19:05:46.514:ERROR/AndroidRuntime(4692):at android.os.Looper.loop(Looper.java:123) 08-06 19 :05:46.514:ERROR/AndroidRuntime(4692):在android.app.ActivityThread.main(活性狀況tythread.java:4627) 08-06 19:05:46.514:ERROR/AndroidRuntime(4692):at java.lang.reflect.Method.invokeNative(Native Method) 08-06 19:05:46.514:ERROR/AndroidRuntime (4692):at java.lang.reflect.Method.invoke(Method.java:521) 08-06 19:05:46.514:ERROR/AndroidRuntime(4692):at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller .run(ZygoteInit.java:868) 08-06 19:05:46.514:ERROR/AndroidRuntime(4692):at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 08-06 19 :05:46.514:ERROR/AndroidRuntime(4692):在dalvik.system.NativeStart.main(本機方法) 08-06 19:05:46.514:ERROR/AndroidRuntime(4692):android.database.sqlite:所致。 SQLiteException:no such table:playlist:,while compiling:SELECT playlist。* FROM playlist ORDER BY id ASC; 08-06 19:05:46.514:ERROR/AndroidRuntime(4692):at android.database.sqlite.SQLiteCompiledSql.native_compile(Native Method) 08-06 19:05:46.514:ERROR/AndroidRuntime(4692):at android SQLiteCompiledSql.java:91) 08-06 19:05:46.514:ERROR/AndroidRuntime(4692):at android.database.sqlite.SQLiteCompiledSql。(SQLiteCompiledSql.java:64) 08 -06 19:05:46.514:ERROR/AndroidRuntime(4692):在android.database.sqlite.SQLiteProgram(SQLiteProgram.java:80) 08-06 19:05:46.514:ERROR/AndroidRuntime(4692):在機器人(SQLiteQuery.java:46) 08-06 19:05:46.514:ERROR/AndroidRuntime(4692):at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:42) 08 -06 19:05:46.514:ERROR/AndroidRun時間(4692):在android.database.sqlite.SQLiteDatabase。rawQueryWithFactory(SQLiteDatabase.java:1345) 08-06 19:05:46.514:ERROR/AndroidRuntime(4692):at android.database.sqlite.SQLiteDatabase.rawQuery(SQLiteDatabase.java:1315) 08-06 19:05: 46.514:錯誤/ AndroidRuntime(4692):at com.androidworkz.andamp.objects.Playlist.getPlaylists(Playlist.java:75) 08-06 19:05:46.514:ERROR/AndroidRuntime(4692):at com.androidworkz。 andamp.andAMP.onCreate(andAMP.java:353) 08-06 19:05:46.514:ERROR/AndroidRuntime(4692):at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 08-06 19: 05:46.514:ERROR/AndroidRuntime(4692):at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627) 08-06 19:05:46.514:ERROR/AndroidRuntime(4692):... 11更多

這裏是dbhelper類

package com.androidworkz.andamp; 

import android.content.Context; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteException; 
import android.database.sqlite.SQLiteOpenHelper; 

public class DBHelper extends SQLiteOpenHelper { 

// Android's default system path for your application's database. 
private static String DB_PATH = "/data/data/com.androidworkz.andamp/databases/"; 

private static String DB_NAME = "playlists.db"; 

public DBHelper(Context context) { 

    super(context, DB_NAME, null, 1); 
    if (!checkDataBaseExistence()) { 
     createDatabase(); 
    } 
} 

public void onCreate(SQLiteDatabase db) { 
    // Leave this method empty 
} 

public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
    // fill in your code here 
} 

public void createDatabase() { 

    SQLiteDatabase db = null; 
    String dbPath = DB_PATH + DB_NAME; 
    db = SQLiteDatabase.openDatabase(dbPath, null, SQLiteDatabase.CREATE_IF_NECESSARY); 
    db.close(); 

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

    db.execSQL("CREATE TABLE [playlist] ("+ 
      "[id] INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,"+ 
      "[name] VARCHAR(255) NULL);)"); 

    db.execSQL("CREATE TABLE [songs] ("+ 
      "[id] INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,"+ 
      "[playlistId] INTEGER NULL,"+ 
      "[songId] INTEGER NULL,"+ 
      "[name] VARCHAR(255) NULL,"+ 
      "[key] VARCHAR(255) NULL,"+ 
      "[duration] INTEGER NULL,"+ 
      "[path] VARCHAR(255) NULL,"+ 
      "[artistName] VARCHAR(255) NULL,"+ 
      "[artistKey] VARCHAR(255) NULL,"+ 
      "[albumId] INTEGER NULL,"+ 
      "[albumName] VARCHAR(255) NULL,"+ 
      "[albumKey] VARCHAR(255) NULL);"); 
    db.close(); 
} 

private boolean checkDataBaseExistence() { 

    // database to be verified 
    SQLiteDatabase dbToBeVerified = null; 

    try { 
     // get database path 
     String dbPath = DB_PATH + DB_NAME; 
     // try to open the database 
     dbToBeVerified = SQLiteDatabase.openDatabase(dbPath, null, 
       SQLiteDatabase.OPEN_READONLY); 

    } catch (SQLiteException e) { 
     // do nothing since the database does not exist 
    } 

    // in case it exists, close it 
    if (dbToBeVerified != null) { 
     // close DB 
     dbToBeVerified.close(); 

    } 

    // in case there is a DB entity, the DB exists 
    return dbToBeVerified != null ? true : false; 
} 
} 

上帝,我討厭這條該死「在這裏輸入代碼」 ......爲什麼不能計算器只使用標籤像一個正常的語法高亮顯示。

回答

2

08-06 19:05:46.389:信息/數據庫(4692):sqlite的返回:錯誤碼= 1,味精=沒有這樣的表格:播放列表

確定數據庫被複制正確的,它看起來好像表不存在?

您是否嘗試過通過DDMS執行操作後將數據從手機中複製過來,然後查看模式是否正確?

+0

是的......所有這一切。事實上...這是我從手機中拉出的分貝。 http://www.androidworkz.com/playlists.db和(正如我指出的)它在1.6模擬器上完美工作。 – androidworkz 2010-08-06 23:43:13

+0

@adnroidworkz嗯,這是奇怪的,我沒有遇到問題,我的助手跨越1.6-2.2,你可以發佈一些你的SQLiteOpenHelper代碼,特別是訪問數據庫?也許我們可以從那裏找出問題。 – 2010-08-06 23:56:51

+0

我很欣賞您花時間回答我的問題。今天早上我能解決這個問題。問題似乎是我正在使用我使用外部工具創建的數據庫,並且當我在Eclipse中打開數據庫時,它告訴我其中一個表包含無效的字段類型...所以我更改了dbhelper類從頭開始創建數據庫而不是複製數據庫,並且工作。 – androidworkz 2010-08-07 16:15:19

0

我注意到,如果您嘗試在啓動後過早訪問表,可能會顯示缺少表格。在嘗試訪問表之前,需要考慮明確的延遲。這讓我瘋狂。

+0

是的,我想我也遇到了這個問題。你解決了嗎?例如使用Thread.sleep()? – 2011-08-10 03:09:41

+0

我想我也遇到過這個問題。你解決了嗎?我從我的一個應用程序版本中崩潰了,用戶甚至可以訪問數據庫之前需要花幾分鐘時間下載mp3文件。我想我也遇到了這個問題。你解決了嗎?我從我的應用程序版本中崩潰,需要幾分鐘時間才能在用戶甚至可以訪問數據庫之前下載mp3文件。 – 2011-08-10 03:23:34

相關問題