簡體   English   中英

將Javascript對象插入Titanium SQLite數據庫

[英]Inserting Javascript Object into Titanium SQLite Database

如果我有一個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)}}");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM