2012-04-03 25 views
1
  1. 附加組件使用的SQLite數據文件可能是使用data.url()訪問的文件之一嗎?如何初始化Firefox插件的SQLite文件?

  2. 如果是這樣,怎麼做,一方面它關閉Services.storage.openDatabase()

  3. 如果沒有,有可能是某些代碼(CREATE TABLE IF EXISTS ...)只被執行首次運行附加組件?

回答

4

是否有可能通過一個附加曾經是()與data.url訪問的文件之一的SQLite的數據文件嗎?

不可以。從附加SDK 1.5開始,擴展在安裝時不再解壓 - 它們保留爲壓縮的XPI文件(這對性能有好處)。但SQLite需要一個物理文件,而不是存檔內的東西。

如果不是,是否有可能對某些代碼(CREATE TABLE IF EXISTS ...)僅在首次運行附加組件時執行?

當然,但你不應該這樣做 - 如果你的數據庫文件由於某種原因被刪除會怎麼樣?這是更好地檢查數據庫是否已經存在:

var dbFile = FileUtils.getFile("ProfD", "foobar.sqlite"); 
var alreadyExists = dbFile.exists(); 
var dbConnection = Services.storage.openDatabase(dbFile); 
if (!alreadyExists) 
    connection.createTable("foo", "id INTEGER PRIMARY KEY, ..."); 

參考:FileUtils.jsm

-2
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 
+0

這不回答任何問題。 – 2012-09-24 12:30:12