javascript - 将 Javascript 对象插入 Titanium SQLite 数据库

标签 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.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 中转义你的 "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)}}");

关于javascript - 将 Javascript 对象插入 Titanium SQLite 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14696445/

相关文章:

javascript - 检查 javascript 数组中的正则表达式字符串匹配

javascript - 如何显示只读网站

JavaScript Array.prototype.sort() 无法调用 DOM.HTMLLIElements

javascript - 错误 : 180: EXCEPTION thrown ('dev!' ): - and ERROR:> aqsrv> 70: Exception caught in (null) - Error -1

javascript - 如何旋转对象并将其旋转重置为零?

java - SQLite 'No such table error'

SQLite 触发器问题

sqlite - SQLite纪元时间(以毫秒为单位)

ios - 编译 Storyboard LaunchScreen.storyboard

android - 以编程方式在钛中设置我的主窗口高度