【问题标题】:Inserting Javascript Object into Titanium SQLite Database将 Javascript 对象插入 Titanium SQLite 数据库
【发布时间】:2013-01-19 17:24:37
【问题描述】:

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

【问题讨论】:

    标签: javascript sqlite titanium


    【解决方案1】:

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

    1. 在字符串化的 json 中转义你的 "s。

    2. 在 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(something) 没有引号,您需要 VALUES("something") 带引号。此外,您必须转义 something 中的任何引号(并做其他事情,但这是另一个主题。)

    所以你的陈述应该看起来更像这样:

    INSERT INTO myTable(persons) VALUES("{\"name\":\"newPerson\", \"stateName\": function stateName(){console.log(this.name)}}");
    

    【讨论】:

    • 我相信你会说,我对 SQLite 完全陌生。你能给我举个例子吗?谢谢你
    • 即便如此,它仍然无法工作......您无法成功序列化函数并使其工作
    • 另外,正如@AaronSaunders 的评论所说,您可能还会考虑,一旦您将这个 JSON 从数据库中取出,您将如何反序列化它。所以你可能想重新考虑对象或其他东西,但同样,这是另一个问题。
    • 谢谢一百万,这对 bn 很有帮助。关于如何反序列化的任何想法链接?
    猜你喜欢
    • 2013-10-06
    • 2017-05-26
    • 2018-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-04
    相关资源
    最近更新 更多