2012-08-28 19 views
5

Estoy tratando de implementar una memoria caché usando sqlite en javascript. Tengo un objeto json que intento convertir en una cadena e ingresar en la base de datos pero sigo obteniendo un error de sintaxis.Cómo puedo insertar un objeto json en una tabla sqlite en javascript, phonegap (cordova)

la mesa consta de dos campos de una cadena MD5 y una cadena JSON, aquí está cómo definir el PP y mesa

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'); 
    }); 

Esta es la forma en que estoy tratando de introducir los datos en la variable d.data es un objeto 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); 

Qué va a tirar y error

08-27 23:19:55.702: E/SQLiteLog(29831): (1) near "networks": syntax error 

La cadena real Estoy Tring para la entrada se parece a esto

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

Estaba pensando que tenía algo que ver con las citas de la cadena json, pero el tipo de campo es solo texto, por lo que no estoy seguro de cuál podría ser el error de sintaxis.

¿Alguna idea?

Respuesta

2

¿Los ha intentado pasar como una matriz:

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 
}); 
7

me di cuenta de la cadena JSON necesitaba ser escapado después de que se convirtió en una cadena

  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(){ 

       }); 
0

@ Brian

Primera pregunta - ¿Es posible convertir un objeto json en cadena y almacenar esa cadena en sqlite databa? se?

Segunda pregunta

  • Si el JSON es que contiene las direcciones URL de mutiple imágenes. Luego, en modo en línea, obtendrá las imágenes de la url de la web. pero si hemos almacenado esas URL en la base de datos sqlite, ¿entonces también es posible mostrar esas imágenes en modo fuera de línea en las aplicaciones cordova?

Si sí, entonces cómo vamos a almacenar esas imágenes

principiante en Córdoba

ayuda necesaria en la transformación de la aplicación en línea en línea de aplicaciones. iónicos angular 2 aplicación

0

También podemos tratar encodeURI() y decodeURI(). Aquí está el ejemplo rápido:

var jsonString = encodeURI (JSON.stringify (d.datos, nulo, ''));

 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'); 
     }); 

Y para decodificar

var data = JSON.parse(decodeURI(sqlData.data)); 

Nota: de escape() y unescape() puede haber trabajo. Pero la función escape() estaba en desuso en JavaScript versión 1.5.

Cuestiones relacionadas