将Javascript对象插入Titanium SQLite数据库

Inserting Javascript Object into Titanium SQLite Database

本文关键字:SQLite 数据库 Titanium 插入 Javascript 对象      更新时间:2023-09-26

如果我有一个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是错误的。你必须做两件事:

  1. 在字符串化的json.中转义您的

  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)。此外,您还必须转义内容中的任何引号(并做其他事情,但这是另一个主题。)

所以你的声明应该更像这样:

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