Firefox расширение SQLite сохранение и получение - PullRequest
4 голосов
/ 09 марта 2011

Хорошо, теперь для сочного.До сих пор все попытки не смогли сохранить мою строку.

Вот код для сохранения его в sqllite в расширении Firefox:

var file = Components.classes["@mozilla.org/file/directory_service;1"]
                     .getService(Components.interfaces.nsIProperties)
                     .get("ProfD", Components.interfaces.nsIFile);
    file.append("my_db_file_name.sqlite");

    var storageService = Components.classes["@mozilla.org/storage/service;1"]
                                   .getService(Components.interfaces.mozIStorageService);

    var mDBConn = storageService.openDatabase(file);

    mDBConn.execute("CREATE TABLE IF NOT EXISTS log_det (id INTEGER PRIMARY KEY AUTOINCREMENT, acc STRING)");
    mDBConn.execute("INSERT INTO log_det (acc) VALUES(" + window['gluistr']+ ")");
    mDBConn.drop();

И код для получения значения:

var file = Components.classes["@mozilla.org/file/directory_service;1"]
                     .getService(Components.interfaces.nsIProperties)
                     .get("ProfD", Components.interfaces.nsIFile);

file.append("my_db_file_name.sqlite");

var storageService = Components.classes["@mozilla.org/storage/service;1"]
                                   .getService(Components.interfaces.mozIStorageService);

var mDBConn = storageService.openDatabase(file);

var res = mDBConn.execute("SELECT * FROM log_det");

mDBConn.drop();

не работает.Кто-нибудь знает почему?"Выполнить" нормально или мне нужно "createStatement" или "executeSimpleSQL".Я в замешательстве.

1 Ответ

3 голосов
/ 09 марта 2011

Использование executeSimpleSQL.

openDatabase возвращает экземпляр mozIStorageConnection , в котором нет метода с именем execute.Вы можете использовать executeSimpleSQL в любое время, когда хотите выполнить инструкцию SQL без привязанных параметров (что вы и делаете).

Возможно, вы думали о mozIStorageStatement's execute метод.executeSimpleSQL недостаточно, когда необходимы связанные параметры.Вместо этого вам нужно создать оператор, связать любые параметры и , а затем выполнить его:

var statement = mDBConn.createStatement(
    "SELECT * FROM log_det WHERE column_name = :parameter");
statement.bindStringParameter(0, "value");
statement.execute();
statement.reset();

Также обратите внимание, что mozIStorageConnection не имеет метода с именем drop.Может быть, вы хотели написать mDBConn.close()?

Все это описано здесь:

...