加载项使用的SQLite数据文件是否可以成为使用data.url()访问的文件之一?
如果是这样,如何将其交给Services.storage.openDatabase()
如果没有,某些代码(CREATE TABLE IF EXISTS ...)是否可以仅在首次运行加载项时执行?
答案 0 :(得分:5)
加载项使用的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
答案 1 :(得分:-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