firefox扩展SQLite保存和获取

时间:2011-03-09 12:24:14

标签: sqlite firefox save

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

以下是在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”。我很困惑。

1 个答案:

答案 0 :(得分:3)

使用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()

所有这些都包含在这里: