2012-08-28 19 views
5

में एक एसक्लाइट तालिका में एक जेसन ऑब्जेक्ट कैसे डाल सकता हूं मैं जावास्क्रिप्ट में स्क्लाइट का उपयोग कर कैश को लागू करने की कोशिश कर रहा हूं। मेरे पास एक जेसन ऑब्जेक्ट है कि मैं डेटाबेस में एक स्ट्रिंग और इनपुट में डालने की कोशिश कर रहा हूं लेकिन एक वाक्यविन्यास त्रुटि प्राप्त करना जारी रखता हूं।मैं जावास्क्रिप्ट, फोनगैप (कॉर्डोवा)

तालिका दो क्षेत्रों एक md5 स्ट्रिंग और एक json स्ट्रिंग के होते हैं, मैं db और टेबल heres कैसे परिभाषित

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

इस तरह मैं इनपुट करने के लिए डेटा कोशिश कर रहा हूँ, जहां चर d.data एक जेसन ऑब्जेक्ट है।

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

कौन सा फेंक और त्रुटि होगा

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

वास्तविक स्ट्रिंग मैं इनपुट करने के लिए tring हूँ इस

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

मैं सोच रहा था उस में उद्धरण के साथ कुछ था की तरह लग रहा जेसन स्ट्रिंग लेकिन फ़ील्ड प्रकार सिर्फ टेक्स्ट है इसलिए मुझे यकीन नहीं है कि वाक्यविन्यास त्रुटि क्या हो सकती है।

कोई विचार?

उत्तर

2

आप एक सरणी के रूप में उन्हें गुजर प्रयास किया है:

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

मैं 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(){ 

       }); 
0

@Brian में बदल गया था

पहला प्रश्न - क्या एक जेसन ऑब्जेक्ट को स्ट्रिंग और स्टोर में कनवर्ट करना संभव है जो स्क्लाइट डाटाबेस में स्ट्रिंग करता है से?

दूसरा प्रश्न

  • json एकाधिक छवियों के यूआरएल युक्त होता है। फिर ऑनलाइन मोड में यह वेब से यूआरएल छवियां लाएगा। लेकिन अगर हमने उन यूआरएल को एसक्लाइट डेटाबेस में संग्रहीत किया है तो उन छवियों को ऑफ़लाइन मोड में भी कॉर्डोवा ऐप्स में दिखाना संभव है?

यदि हाँ तो कैसे हम उन छवियों

शुरुआत कॉर्डोबा में स्टोर करेगा

ऑफ़लाइन एप्लिकेशन में ऑनलाइन एप्लिकेशन बदलने में आवश्यक मदद करते हैं। आयनिक-कोणीय 2 एप्लिकेशन

0

हम भी encodeURI() और decodeURI() कोशिश कर सकते हैं। यहां त्वरित उदाहरण दिया गया है:

var jsonString = encodeURI (JSON.stringify (डी।डेटा, शून्य, ''));

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

और डिकोड

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

नोट के लिए: बच() और अनएस्केप() काम हो सकता है। लेकिन escape() फ़ंक्शन को जावास्क्रिप्ट संस्करण 1.5 में बहिष्कृत किया गया था।

संबंधित मुद्दे