我只是从Node-Webkit(现在是NW.js)开始,我正在尝试使用Web-SQL来存储数据。

与示例中完全一样,创建数据库也可以正常工作,而再次插入示例中,通常可以插入数据。 但是,当我插入从jsTree创建的JSON对象时,遇到了麻烦。

JSON对象是使用jsTree方法创建的: get_json('#', { 'flat': false }) ,然后使用JSON.stringify转换为字符串,但是当我尝试将其插入到表中时(存在且具有正确的字段数,等等)我遇到了一个错误。

目前,我正在使用以下代码:

    DBase.transaction(
        function(tx){
            var v = $("#TheTree").jstree(true).get_json('#', { 'flat': false });
            var jsv = JSON.stringify(v);
            tx.executeSql(
                'INSERT INTO TheTable VALUES(null, "Default", ' + jsv + ')',
                [],
                function(tx, data){ console.log("Success"); }, 
                function(tx, error){ console.error("FAIL",error); }
            );
        };
    );

JSON.stringify返回时,JSON为以下内容:

[{"id": "IDSTring","text": "Welcome String","icon": true,"li_attr": {"id": "tID4392"},"a_attr": {"href": "#","id": "tID4392_anchor"},"state": {"loaded": true,"opened": false,"selected": false,"disabled": false},"data": {},"children": []}]

如果我使用相同的代码以及任何其他值代替变量jsv ,例如任何标准字符串等,则不会发生错误并且会插入数据,但是JSON会导致以下错误: could not prepare statement (1 unrecognized token: "}") CODE: 5

JSON在JSON Lint上进行验证,可以毫无问题地加载(解析)回jsTree中,因此我认为它只能是引起问题的INSERT。

经过一些搜索,iv尝试将代码更改为:

'INSERT INTO TheTable VALUES(null, "Default", "' + jsv + '")'

'INSERT INTO TheTable VALUES(null, "Default", [' + jsv + '])'

具有非常相似的错误,通常是语法错误或“]”(无法识别的标记),但始终是'Code:5'。

任何帮助将不胜感激。

问候

马克斯

===============>>#1 票数:1 已采纳

您需要转义参数或使用准备好的语句。 尝试这个:

tx.executeSql('INSERT INTO TheTable VALUES(null, "Default", ?)', [jsv], ...

executeSql的第二个参数是一个数组,其中包含将用于代替查询中的问号的所有值。 这里有更多示例: http : //html5doctor.com/introducing-web-sql-databases/

  ask by MaxVK translate from so

未解决问题?本站智能推荐: