现在好了,多汁的东西。到目前为止,所有尝试都未能保存我的字符串。
这是在 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()
?所有这些都在这里涵盖: