2

javasciptオブジェクトがある場合:

 var person = new Object();
 person.name = "newPerson";
 person.occupation = "Programmer";
 person.stateName = function(){
 console.log(this.name);
};

SQLiteベースのTitanium.DatabaseAPIを使用して、このオブジェクトを単一のフィールドに格納するにはどうすればよいですか?以下は正常に機能しています。

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
4

1 に答える 1

1

あなたのSQLは間違っています。あなたは2つのことをしなければなりません:

  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)}}");
于 2013-02-04T22:33:24.953 に答える