在sqlite中存储json数据(phonegap app)

时间:2015-03-22 08:11:43

标签: javascript jquery json sqlite cordova

如何将解码的JSON数据存储到SQLite数据库中。该应用程序是使用phonegap构建的。

这是json数据被解码的函数。

function onNotification(e) {               
    switch( e.event )
    {
        case 'message':                                                 
            $("#app-status-ul").append('<li>MESSAGE -> MSG: ' + e.payload.message + '</li>');
            var j=JSON.stringify(e);
            $("#app-status-ul").append('<li>MESSAGE -> MSG DECODED: ' + j + '</li>');
            //android only
            $("#app-status-ul").append('<li>MESSAGE -> MSGCNT: ' + e.payload.msgcnt + '</li>');
            //amazon-fireos only
            $("#app-status-ul").append('<li>MESSAGE -> TIMESTAMP: ' + e.payload.timeStamp + '</li>');
            break;
    }
}

此处,JSON消息被解码并存储到变量j。它正在正确显示。我想将它存储到SQLite数据库中。我尝试添加插件,但它显示错误,如“这没有响应”。如何将消息存储到SQL数据库中。

以下是我尝试显示j时的内容。

  

消息 - &gt;味精:未定义

     

消息 - &gt; MSG解码:   { “有效载荷”:{ “0”:{ “medicine_name”:空}, “1”:{ “tm_1”:空}, “2”:{ “tm_2”:空}, “3”:{ “tm_3”日期null}, “4”:{ “剂量”:NULL} “5”:{ “medicine_name”:空}, “6”:{ “tm_1”:空}, “7”:{ “tm_2”:空}, “8”:{ “tm_3”:空}, “9”:{ “剂量”:空}, “10”:{ “medicine_name”:空}, “11”:{ “tm_1”:空} “12”:{ “tm_2”:空}, “13”:{ “tm_3”:空}, “14”:{ “剂量”:空}, “15”:{ “medicine_name”:空},“16 “:{” tm_1 “:空},” 17 “:{” tm_2 “:空},” 18 “:{” tm_3 “:空},” 19 “:{” 剂量 “:空},” 20" : { “medicine_name”:空}, “21”:{ “tm_1”:空}, “22”:{ “tm_2”:空}, “23”:{ “tm_3”:空}, “24”:{”剂量 “:空},” 25 “:{” medicine_name “:空},” 26 “:{” tm_1 “:空},” 27 “:{” tm_2 “:空},” 28 “:{” tm_3"日期null}, “29”:{ “剂量”:空}, “30”:{ “medicine_name”:空}, “31”:{ “tm_1”:空}, “32”:{ “tm_2”:空}, “33”:{ “tm_3”:空}, “34”:{ “剂量”:空}, “35”:{ “诊断”:空}, “36”:{ “指令”:空}} ,“

请帮忙。

这是我尝试将其存储到SQL中的方法。但它没有用

$("#app-status-ul").append('<li>MESSAGE -> MSG: ' + e.payload.message + '</li>');
var db = window.sqlitePlugin.openDatabase({name: "drrem.db", location: 1});
db.transaction(function(tx)
{
     tx.executeSql('DROP TABLE IF EXISTS Medicine');
     tx.executeSql('CREATE TABLE IF NOT EXISTS test_table (medicine_name text,tm_1 integer,tm_2 integer,tm_3 integer,dosage text,diagnosis text,instructions text)');
     var j=[hash, JSON.stringify(e, null, "")];
     tx.executeSql("INSERT OR REPLACE INTO Medicine (medicine_name,tm_1,tm_2,tm_3,dosage,diagnosis,instructions) VALUES (?, ?)", j, function(tx, result)
      {
            console.log("insertId: " + result.insertId + " -- probably 1");
            console.log("rowsAffected: " + result.rowsAffected + " -- should be 1");
      });
});

1 个答案:

答案 0 :(得分:0)

代码的问题是:

您尝试插入e,其payload包含数组。 你应该迭代而不是数组,for每条消息都插入它。

您还有(?, ?),应该是(?, ?, ?, ?, ?, ?, ?)

备注:

1)您获得MSG: undefined,因为如果您仔细查看没有属性e.payload.message,则显示来自message的消息,应为e.payload

$("#app-status-ul").append('<li>MESSAGE -> MSG: ' + JSON.stringify(e.payload) + '</li>');

2)您不需要使用JSON.stringify,因为tx.executeSql期望您插入的数据为array(例如[ 'medicine_value', 'tm_1_value1', ... ]

3)此表格不包含id列(向表格添加id unique

4)如果您想查看是否插入了数据,make a select

$("#app-status-ul").append('<li>MESSAGE -> MSG: ' + e.payload.message + '</li>');
  var db = window.sqlitePlugin.openDatabase({name: "drrem.db", location: 1});
db.transaction(function(tx)
{
    tx.executeSql('DROP TABLE IF EXISTS Medicine');
    tx.executeSql('CREATE TABLE IF NOT EXISTS test_table (id unique, medicine_name text,tm_1 integer,tm_2 integer,tm_3 integer,dosage text,diagnosis text,instructions text)');


    var totalItems = 5;
    var currentArray = [];
    var arr = [];
    arr.push(currentArray);
    currentArray.push(arr.length);
    for (var key in e.payload) {
        var prop = e.payload[key]; 
        for (var name in prop) {
            currentArray.push(prop[name]);
            if(i%totalItems == 0) {
                i = 0;
                currentArray.push(null);
                currentArray.push(null);
                currentArray = [];
                arr.push(currentArray);
                currentArray.push(arr.length);
            }
        }   
        i++;
    };
    arr.pop();

    for(var idx = 0; idx < arr.length; idx++)
    {  
        var j=arr[idx];
        tx.executeSql("INSERT OR REPLACE INTO Medicine (id,medicine_name,tm_1,tm_2,tm_3,dosage,diagnosis,instructions) VALUES (?, ?, ?, ?, ?, ?, ?, ?)", j, function(tx, result)
         {
             console.log("Insert succeed");
             console.log(result);
         });
    }
});