如果我有一个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.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
答案 0 :(得分:1)
你的sql错了。你必须做两件事:
在字符串化的json中逃脱你的。
在SQL语句中将该字符串括在引号中。
你在做什么相当于:
db.execute("INSERT INTO myTable (persons) VALUES({name: "newPerson, stateName: function() {console.log(this.name)})");
更简单:INSERT INTO myTable (persons) VALUES( {name:"Joe"} );
名称部分可能在引号中,也可能不在引号中,取决于您执行此操作的位置。 (最好添加它们,使存储的对象成为真正的JSON。)
您要做的是INSERT INTO myTable(persons) VALUES ( "{\"name\": \"Joe\"} " );
请注意,您有没有引号的VALUES(某事),您需要带引号的VALUES(“某事”)。此外,您必须在某事中删除任何引号(并执行其他操作,但这是另一个主题。)
所以你的陈述看起来应该更像这样:
INSERT INTO myTable(persons) VALUES("{\"name\":\"newPerson\", \"stateName\": function stateName(){console.log(this.name)}}");