2012-04-03 43 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