2012-08-28 8 views
5

Próbuję zaimplementować pamięć podręczną przy użyciu sqlite w javascript. Mam obiekt Json, który próbuję rzucić na ciąg znaków i wprowadzić do bazy danych, ale nadal otrzymuję błąd składni.Jak mogę wstawić obiekt json do tabeli sqlite w javascript, phonegap (cordova)

tabela składa się z dwóch pól ciąg MD5 i ciąg json, herezje jak zdefiniować db i stół

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

ten sposób staram się wprowadzić dane gdzie zmienna d.data jest obiektem 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); 

Która rzuci i błędów

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

Rzeczywiste ciąg jestem tring wejście wygląda to

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

myślałem że miał coś wspólnego z cytatów ciąg json, ale typ pola jest po prostu tekstem, więc nie jestem pewien, jaki może być błąd składni.

Wszelkie pomysły?

Odpowiedz

2

Czy próbowali przekazując je jako tablica:

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

zorientowali się ciąg JSON potrzebne do uciekł po to został przekształcony w ciąg

  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

Pierwsze pytanie - Czy jest możliwe przekonwertowanie obiektu json na ciąg znaków i zapisanie tego ciągu w sqlite databa se?

Drugie pytanie

  • Jeśli JSON zawierające adresy URL roznych obrazów. Następnie w trybie online pobierze obrazy URL z Internetu. ale jeśli mamy przechowywane te adresy URL w bazie danych sqlite, to możliwe jest również wyświetlanie tych zdjęć w trybie offline w aplikacjach cordova?

jeśli tak to w jaki sposób będziemy przechowywać te obrazy

początkujący w Cordova

help wymagane przekształcenie aplikację on-line w trybie offline aplikacji. kątowa 2-jonowy aplikacja

0

Możemy także spróbować encodeURI() i decodeURI(). Oto krótki przykład:

var jsonString = encodeURI (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'); 
     }); 

A dla dekodowania

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

Uwaga: escape() i unescape() może być praca. Funkcja escape() została uznana za przestarzałą w wersji 1.5 języka JavaScript.

Powiązane problemy