如何在javascript,phonegap(cordova)中将json对象插入到sqlite表中

Bri*_*ian 5 javascript sqlite json cordova

我正在尝试在javascript中使用sqlite实现缓存.我有一个json对象,我正在尝试将其转换为字符串并输入到数据库中,但不断出现语法错误.

该表由两个字段组成,一个是md5字符串,另一个是json字符串,这是我如何定义db和table的

   db = window.openDatabase("Database", "1.0", "Cordova Demo",10485760);

    db.transaction(function(tx){
         tx.executeSql('DROP TABLE IF EXISTS CACHE_DATA');
         tx.executeSql('CREATE TABLE IF NOT EXISTS CACHE_DATA (md5 TEXT UNIQUE, data TEXT)');
    },function(tx,error){
        console.log('tx error: ' + error);
    },function(){
        console.log('tx success');
    });
Run Code Online (Sandbox Code Playgroud)

这就是我试图输入变量d.data是json对象的数据.

   var jsonString = JSON.stringify(d.data, null, '');

            db.transaction(function(tx){
                tx.executeSql('INSERT OR REPLACE INTO CACHE_DATA (md5, data) VALUES ("'+hash+'", "'+jsonString+'")');
            },function(tx,error){
                console.log(JSON.stringify(tx.message));
                console.log(JSON.stringify(error));
            },function(){
                console.log('tx success');
            });

             console.log(jsonString);
Run Code Online (Sandbox Code Playgroud)

哪个会抛出错误

08-27 23:19:55.702: E/SQLiteLog(29831): (1) near "networks": syntax error
Run Code Online (Sandbox Code Playgroud)

我输入的实际字符串看起来像这样

08-27 23:19:55.652: D/CordovaLog(29831): {"networks":[{"id":"66","name":"Test"}],"expires":1346138396}
Run Code Online (Sandbox Code Playgroud)

我认为它与json字符串中的引号有关,但字段类型只是文本,所以我不确定语法错误是什么.

有任何想法吗?

Bri*_*ian 7

我想出了转换成字符串后需要转义的JSON字符串

            var jsonString = escape(JSON.stringify(d.data));

            db.transaction(function(tx){
                tx.executeSql('INSERT OR REPLACE INTO CACHE_DATA (md5, json, expires) VALUES ("'+hash+'", "'+jsonString+'","'+expireStamp+'")');
            },function(tx,error){
                console.log(JSON.stringify(tx.message));
                console.log(JSON.stringify(error));
            },function(){

                });
Run Code Online (Sandbox Code Playgroud)


zvo*_*ona 3

您是否尝试过将它们作为数组传递:

var valuesInArray = [hash, JSON.stringify(d.data, null, "");

tx.executeSql("INSERT OR REPLACE INTO CACHE_DATA (md5, data) VALUES (?, ?)", valuesInArray, function(tx, result)  {
  // Success Callback
});
Run Code Online (Sandbox Code Playgroud)