怎样将这个数组批量插入到数据库?

1.怎样将values数组中的数据批量插入到数据库?
values获取的值为:values=[[1,2,1,'00',418,223],[1,3,1,'00',418,224]];而且该数组的长度不确定,此处长度为2,求指导,谢谢!

function insertData(data){

    // console.log(data);
    // var events = [];
    var values=[];
    async.map(data,function(item,cb){
    _getNewSN({
        query:{category : "ProjectOID_" + item.ProjectOID},
        success:function(sn){
            var param=[parseInt(item.FunctionCode) ,
                        parseInt(item.StartRegister) ,  
                        parseInt(item.Length) , 
                        item.Description , 
                        item.ProjectHardwareOID , 
                        sn.SN];
            cb(null,param)
        },
        error : sender.error
    });
    },function(err,values){
        console.log(values)
        var sql = "insert into " + 
                    "plcModbusTCPDB(FunctionCode,StartRegister," + 
                    "Length,Description,ProjectHardwareOID," + 
                    "DataID) values (?,?,?,?,?,?)";
        yjDBService.exec({
            sql:sql,
            parameters : values,
            success : sender.success,
            error : sender.error
        });
    })### 问题描述

问题出现的环境背景及自己尝试过哪些方法

相关代码

// 请把代码文本粘贴到下方(请勿用图片代替代码)

你期待的结果是什么?实际看到的错误信息又是什么?

阅读 2.8k
1 个回答

1、values 数组拼接成批量插入字符串,然后直接拼接 sql。代码如下;
2、推荐使用 sequelizejs。操作数据库更安全、方便。

const values = [[1, 2, 1, "00", 418, 223], [1, 3, 1, "00", 418, 224]]

var str = '';
const len = values.length;
for (let index = 0; index < len; index++) {
    const element = values[index].toString();
    str += '(' + element + ')';
    if (index != len - 1) str += ',';
}

console.log(str) // (1,2,1,00,418,223),(1,3,1,00,418,224)
const sql = "insert into " +
    "plcModbusTCPDB(FunctionCode,StartRegister," +
    "Length,Description,ProjectHardwareOID," +
    "DataID) values " + str;
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题