簡體   English   中英

如何初始化Firefox附加組件的SQLite文件?

[英]How to initialize SQLite file for Firefox add-on?

  1. 附加組件使用的SQLite數據文件是否可能是使用data.url()訪問的文件之一?

  2. 如果是這樣,如何將其交給Services.storage.openDatabase()

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

附加組件使用的SQLite數據文件是否可能是使用data.url()訪問的文件之一?

從Add-on 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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM