将Javascript对象插入到SQLite数据库中

将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

如果我有一个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

您的sql是错误的。你必须做两件事:

  • 在字符串化的json中转义您的

  • 在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,你将如何反序列化它。所以你可能想重新思考对象或其他东西,但这又是另一个问题。非常感谢,这非常有用。有关于如何反序列化的想法吗?是的,即使在这里也有很多:,