【问题标题】:How to add JS object into Sqlite database如何将 JS 对象添加到 Sqlite 数据库中
【发布时间】:2014-10-16 01:33:28
【问题描述】:

我在尝试将 JS 对象添加到 sqlite 数据库时遇到问题。我正在使用 cordova,为 android、windows 和 iOS 创建一个应用程序。

我有这个代码用于我的插入和检索...

var data = localStorage.getItem('folderData');
console.log(data);
var username = localStorage.getItem("username");
var session = localStorage.getItem("session_ID");
tx.executeSql('CREATE TABLE IF NOT EXISTS folderData (id integer primary key autoincrement, username, sessionID, folderData text)');
tx.executeSql('SELECT * FROM folderData WHERE username = "'+username+'"', [], function(tx, result) {
    if(result.rows.length > 0){
        tx.executeSql('UPDATE folderData SET folderData = "'+data+'", sessionID = "'+session+'" WHERE username = "'+username+'"');
        alert('An update has occured folderData');
    } else {
        tx.executeSql('INSERT INTO folderData (username, sessionID, folderData) VALUES ("'+username+'", "'+session+'", "'+data+'")');
        alert('An insert has occured folderData');
    }
});
tx.executeSql('SELECT folderData FROM folderData WHERE username = "'+username+'" AND sessionID = "'+session+'" ORDER BY id desc LIMIT 1', [], function(tx, result) {
    querySuccessFolderData(tx, result);
});

数据变量是我的对象。当我在插入之前 console.log(data) 时,我得到以下内容

这是我的querySuccessFolderData 函数

function querySuccessFolderData(tx, results) {
    var len = results.rows.length;
    //alert("folderData table: " + len + " rows found.");
    var newFolderData = jsonParse(results.rows.item(0).folderData);
    for(i=0;i<len;i++)
    {
        var newFolderData = results.rows.item(i).folderData;
    }
    console.log(newFolderData);
}

console.log(newFolderData); 现在显示为 [Object Object]

我做错了什么?从数据库中选择对象后,是否需要再次转换对象?现在这对我来说已成为一场噩梦,我已经关注它太久了。任何帮助将不胜感激。

【问题讨论】:

  • 您正在使用data = jsonParse(data); 并将其插入到数据库中。然后,在阅读时,您正在做jsonParse(results.rows.item(0).folderData)。没有“JSON 对象”之类的东西,只有 JS 对象或 JSON 字符串。您需要作为 JSON 字符串插入数据库,然后在读取时将该 JSON 字符串解析为 JS 对象
  • 感谢您的澄清。我已经编辑了我的问题以反映这一点。我在插入之前删除了 jsonParse(data),但是当我检索数据时,它仍然显示为 [object Object]。有什么想法吗?

标签: javascript json sqlite cordova


【解决方案1】:

设法解决了我的问题。

设置我的 localStorage 数据。

localStorage.setItem("folderData", JSON.stringify(data['root']));

使用 getItem 在另一个函数中检索它并对其进行编码以供数据库插入

var data = localStorage.getItem('folderData');
data = encodeURI(data);

然后使用 decodedURI 和 jsonParse 将其转回对象

var newFolderData = results.rows.item(0).folderData;
newFolderData = decodeURI(newFolderData);
newFolderData = jsonParse(newFolderData);

这让我保存了正确的数据。

【讨论】:

  • 你可能想看看brian.io/lawnchair 我发现它在简化localStorage 操作方面非常棒。这对你正在做的事情来说可能有点矫枉过正,但它为我节省了很多时间。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多