现在好了,多汁的东西。到目前为止,所有尝试都未能保存我的字符串。

这是在 Firefox 扩展中将其保存在 sqllite 中的代码:

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”。我很困惑。

最佳答案

使用 executeSimpleSQL
openDatabase 返回一个 mozIStorageConnection 实例,它没有任何名为 execute 的方法。您可以随时使用 executeSimpleSQL 执行没有绑定(bind)参数的 SQL 语句(这就是您正在做的事情)。

您可能正在考虑 mozIStorageStatement's execute 方法。当需要绑定(bind)参数时,executeSimpleSQL 是不够的。相反,您需要创建一个语句,绑定(bind)任何参数,然后执行它:

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

另请注意, mozIStorageConnection 没有任何名为 drop 的方法。也许你打算写 mDBConn.close()

所有这些都在这里涵盖:
  • https://developer.mozilla.org/en/storage
  • 10-08 06:30