2013-03-29 35 views
0

我試圖讀取存儲在SDCard上的SQLite數據庫。該部分代碼如下:從SD卡獲取數據庫的問題

public String getTables() { 
    String dbFullPath = Environment.getExternalStorageDirectory().toString() + "/external_sd/database.db"; 
    String query = "SELECT name from sqlite_master where type='table'"; 
    SQLiteDatabase mDatabase = SQLiteDatabase 
      .openDatabase(dbFullPath, null, SQLiteDatabase.OPEN_READONLY 
        + SQLiteDatabase.NO_LOCALIZED_COLLATORS); 
    Log.d(TAG, "Is db open? " + mDatabase.isOpen()); 
    Cursor cursor = mDatabase.rawQuery(query, null); 
    String tables = cursor.getString(0); 
    cursor.close(); 

    return tables; 
} 

然而,運行此代碼時,我得到以下錯誤

了java.lang.RuntimeException:無法啓動活動ComponentInfo {...}: android.database.sqlite.SQLiteException:無法打開數據庫文件:,在編譯:從SQLITE_MASTER SELECT name其中類型= '表'

Cursor cursor = mDatabase.rawQuery(query, null);線。

調試日誌返回Is db open? true,這意味着我獲得了正確的路徑並且數據庫已成功打開?

+0

嘗試另一種說法會發生什麼,然後讓我知道。 – Sajmon

+0

@Sajmon同樣的事情,這應該是一個簡單的調試查詢,適用於任何有效的數據庫。 – Muz

回答

0
Cursor cursor = mDatabase.query(sqlite_master, new String[] { "name" }, "type=" + table, null, 
       null, null, "name asc"); 
+0

不起作用:(仍然是同樣的問題:'引起:android.database.sqlite.SQLiteException:無法打開數據庫文件:,在編譯時:SELECT name FROM sqlite_master WHERE type ='table'ORDER BY name asc' – Muz

+0

檢查是否你在查詢中指定的字段,即類型和名稱是否存在或不在sqlite_master? – Shiv

+0

是的,我用另一個應用程序打開數據庫,查詢工作正常。我想我打開數據庫錯了,但調試日誌意味着我 – Muz