2011-07-19 42 views
2

我有一個本地sqlite數據庫,我想通過HTML5 webstorage加載/讀取它。但我無法做到這一點。我已經通過將文件放入同一個文件夾並運行下面的腳本來嘗試它。從本地sqlite加載webstorage

<html> 
<head> 
<title> Search </title> 
<script> 
var db = null; 
function startapp(){ 
db = window.openDatabase("artistsWcities.sqlite", '1.0', 'Test', 19 * 1024 * 1024); 
if (db) { 
alert("database loaded"); 
} 
} 
</script> 
</head> 
<body onload="startapp()"> 
</body> 
</html> 

但它創建了新文件而不是讀新文件。這個怎麼做?

回答

0

在W3C specificationopenDatabase構造函數只適用於第一個參數,如瀏覽器數據庫名稱,而不是任何文件名。規格報價:

用戶代理的行爲就好像數據庫被託管在沒有資源的完全空的環境中。例如,試圖從 讀取或寫入文件系統將失敗。

您可以從本地資源中僅在瀏覽器擴展或組件中獲得sqlite文件,例如Firefox

您可以通過服務器的請求(例如,AJAX)獲得文件artistsWcities.sqlite,並在成功回調之後將其傳遞給瀏覽器本地數據庫。更多的信息在這question

但是,如果您的代碼示例來自瀏覽器的擴展名,請仔細閱讀文檔。如果Firefox擴展可以通過以下方式加載本地數據庫:

Components.utils.import("resource://gre/modules/Services.jsm"); 
Components.utils.import("resource://gre/modules/FileUtils.jsm"); 

let file = FileUtils.getFile("ProfD", ["my_db_file_name.sqlite"]); 
let mDBConn = Services.storage.openDatabase(file); // Will also create the file if it does not exist