Как инициализировать файл SQLite для дополнения Firefox? - PullRequest
1 голос
/ 03 апреля 2012
  1. Возможно ли, чтобы файл данных SQLite, используемый надстройкой, был одним из файлов, доступ к которым осуществляется с помощью data.url ()?

  2. ЕслиИтак, как передать его в Services.storage.openDatabase ()

  3. Если нет, возможно ли выполнение только определенного кода (CREATE TABLE IF EXISTS ...)при первом запуске дополнения?

Ответы [ 2 ]

5 голосов
/ 03 апреля 2012

Возможно ли, чтобы файл данных 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

0 голосов
/ 13 сентября 2012
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
...