将Javascript对象插入到SQLite数据库中
如果我有一个javascipt对象:将Javascript对象插入到SQLite数据库中,javascript,sqlite,titanium,Javascript,Sqlite,Titanium,如果我有一个javascipt对象: var person = new Object(); person.name = "newPerson"; person.occupation = "Programmer"; person.stateName = function(){ console.log(this.name); }; 使用基于SQLite的Titanium.Database API,如何将此对象存储在单个字段中?以下各项工作正常: var db = Titanium.Dat
var person = new Object();
person.name = "newPerson";
person.occupation = "Programmer";
person.stateName = function(){
console.log(this.name);
};
使用基于SQLite的Titanium.Database API,如何将此对象存储在单个字段中?以下各项工作正常:
var db = Titanium.Database.openFile(Titanium.Filesystem.getFile(
Titanium.Filesystem.getApplicationDataDirectory(),'myDatabase.db'));
db.execute("CREATE TABLE IF NOT EXISTS myTable (persons TEXT)");
然后我想将对象存储在表字段中:
db.execute("INSERT INTO myTable (persons) VALUES(?)", JSON.stringify(person));
但返回以下内容:
SQL Statement invalid or database missing
[21:55:35:300] [Titanium.Database.DB] [Error] Exception executing: INSERT INTO myTable
(person) VALUES(?), Error was: SQL Statement invalid or database missing
您的sql是错误的。你必须做两件事:
db.execute(“插入myTable(persons)值({name:“newPerson,stateName:function(){console.log(this.name)})”);
更简单的是:INSERT-INTO-myTable(persons)值({name:“Joe”});
名称部分可能在引号中,也可能不在引号中,这取决于您在哪里执行此操作。(最好添加它们,使您存储的对象成为真正的JSON。)
您要做的是插入myTable(persons)值(“{\“name\”:\“Joe\”}”);
请注意,您的值(某物)没有引号,您需要带引号的值(“某物”)。此外,您还必须在某物中转义任何引号(并执行其他操作,但这是另一个主题。)
所以你的陈述应该更像这样:
INSERT INTO myTable(persons) VALUES("{\"name\":\"newPerson\", \"stateName\": function stateName(){console.log(this.name)}}");
我相信你可以告诉我,我对SQLite是完全陌生的。你能给我一个例子吗?即使这样,它仍然无法工作…你无法成功地序列化函数并使其工作,正如@AaronSaunders的评论所说,你也可能会想,一旦你从数据库中取出这个JSON,你将如何反序列化它。所以你可能想重新思考对象或其他东西,但这又是另一个问题。非常感谢,这非常有用。有关于如何反序列化的想法吗?是的,即使在这里也有很多:,