Sqlite没有INSERTING动态JSON数据

时间:2016-09-27 11:59:19

标签: sqlite ionic-framework

我正在使用Ionic v1并尝试将一些JSON记录插入到Android Kitkat上的SQLite数据库中。如果我使用静态变量它可以工作,但只插入数组中的第一项,但如果我尝试使变量名称动态,我会收到错误:

  

无法读取未定义

的属性'mac_id'

我已经尝试了以下两个代码段,第一个工作但只插入JSON数组中的第一个项目,第二个不起作用:

使用:

但只插入第一项(多次)

for ( var i = 0; i < data.length; i++)
                {

                    var mac_id = data[i].mac_id;
                    var device_type = data[i].device_type;
                    var machine_id = data[i].machine_id;
                    var machine_name = data[i].machine_name;
                    var date_created = data[i].date_created;

                    db.transaction(function (tx) {

                        var query = "INSERT INTO devices (mac_id, device_type,machine_id,machine_name,date_created) VALUES (?,?,?,?,?)";

                        tx.executeSql(query, [mac_id , device_type , machine_id , machine_name , date_created ], function(tx, res) {

                        },
                        function(tx, error) {
                            console.log(' device INSERT error: ' + error.message);
                        });
                    }, function(error) {
                        console.log(' device transaction error: ' + error.message);
                    }, function() {
                        console.log('device INSERT ok');
                    });                 

                }

不工作

for ( var i = 0; i < data.length; i++)
                {


                    db.transaction(function (tx) {

                        var query = "INSERT INTO devices (mac_id, device_type,machine_id,machine_name,date_created) VALUES (?,?,?,?,?)";

                        tx.executeSql(query, [data[i].mac_id, data[i].device_type, data[i].machine_id, data[i].machine_name, data[i].date_created ], function(tx, res) {

                        },
                        function(tx, error) {
                            console.log(' device INSERT error: ' + error.message);
                        });
                    }, function(error) {
                        console.log(' device transaction error: ' + error.message);
                    }, function() {
                        console.log('device INSERT ok');
                    });                 

                }

JSON数组

[
  {
    "id": "3",
    "mac_id": "fsdf324324",
    "device_type": "redvfsdfds",
    "machine_id": "3",
    "machine_name": "sdfsdfsdf",
    "date_created": "3322342"
  },
  {
    "id": "2",
    "mac_id": "243434",
    "device_type": "fredssd",
    "machine_id": "2",
    "machine_name": "fdsfsdf",
    "date_created": "43434"
  },
  {
    "id": "1",
    "mac_id": "1324324234",
    "device_type": "bweight",
    "machine_id": "1",
    "machine_name": "dffdgf",
    "date_created": "4324234"
  }
]

1 个答案:

答案 0 :(得分:0)

db.transaction(function (tx) {
                    for ( var i = 0; i < $scope.data.length; i++)
                    {
                    var query = "INSERT INTO devices (mac_id, device_type,machine_id,machine_name,date_created) VALUES (?,?,?,?,?)";

                    tx.executeSql(query, [data[i].mac_id, data[i].device_type, data[i].machine_id, data[i].machine_name, data[i].date_created ], function(tx, res) {
                    },function(tx, error) {
                        console.log(' device INSERT error: ' + error.message);
                    });
                }
                }, function(error) {
                    console.log(' device transaction error: ' + error.message);
                }, function() {
                    console.log('device INSERT ok');
                });

你应该在事务中使用for循环。像这样使用它。希望这会有所帮助:)