现在好了多汁的东西。到目前为止,所有尝试都无法保存我的字符串。
以下是在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”。我很困惑。
答案 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()
?
所有这些都包含在这里: