如何将解码的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");
});
});
答案 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);
});
}
});