[英]Bulk insert in MySql using node.js
I have written the following code to insert set of records by reading JSON using for loop. 我编写了以下代码,以通过使用for循环读取JSON来插入记录集。
This is my code: 这是我的代码:
node.js: Node.js的:
var MySQLHelper = {
composeQuery:
function(stpName, paramArray) {
var statement = "call " + stpName + "(";
for(var i = 0, len = paramArray.length; i < len; ++i) {
var p = paramArray[i];
statement += "'" + p +"'"; // add a parameter
if (i != len-1 ) {
statement += ","; // add a parameter seperater
}
else {
statement += ")"; // closing statement
}
}
return statement;
}
}
Dam.prototype.InsertPreset = function(taskInfo) {
// Compose a dynamic mySQL query statement for inserting a preset
for(var i=0;i<taskInfo.presetList.length;i++){
var insert_preset_statement =MySQLHelper.composeQuery('preset_insert',
[ taskInfo.presetList[i].Name,
taskInfo.presetList[i].Category,
taskInfo.presetList[i].GUID
]);
this.connection.query(insert_preset_statement, function(err, result) {
if (err) {
console.log('db error:' + err);
}
else {
console.log('db task : Successfully Added');
}
});
}
}
JSON: JSON:
{
"presetList": [
{
"Name": "AARAMBAMTestfile",
"Category": "Harmonic",
"GUID": "ABC10203"
},
{
"Name": "ENDHIRANTestfile",
"Category": "Harmonic",
"GUID": "DRU03472"
}
]
} }
To do this, I have written a normal insert stored procedure in MySql and it is given below: 为此,我在MySql中编写了一个普通的插入存储过程,如下所示:
MySQL SP: MySQL SP:
DELIMITER $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `preset_insert`(
IN p_Name varchar(50),
IN p_Category varchar(50),
IN p_GUID varchar(50)
)
BEGIN
INSERT INTO Preset
(
PresetName,
PresetCategory,
PresetGUID,
)
VALUES
(
p_Name,
p_Category,
p_GUID
);
END
The above codes are working fine. 上面的代码工作正常。 But I don't want to insert one by one using for loop.
但是我不想使用for循环一一插入。 But instead of doing this thing using for loop, I want to use insert select statement for bulk insert at a single time.
但是,我不想使用for循环来执行此操作,而是希望一次使用insert select语句进行批量插入。 How to do this using node.js?
如何使用node.js做到这一点?
you can make a single insert query like the following, and call the query to execute. 您可以进行如下单个插入查询,然后调用该查询执行。
function insertValues(ob) {
return "('" + ob.Name + "','" + ob.Category + "','" + ob.GUID + ")";
}
var queryStr = "INSERT INTO `Preset` (`PresetName ` ,`PresetCategory `, `PresetGUID `)
VALUES ";
var valueStrs = [];
for(var i=0;i<taskInfo.presetList.length;i++){
valueStrs.push(insertValues(taskInfo.presetList[i]));
}
queryStr += valueStrs.join(',');
this.connection.query(queryStr, function(err, result) {
if (err) {
console.log('db error:' + err);
}
else {
console.log('db task : Successfully Added');
}
});
I tried this code and is working fine: 我尝试了这段代码,并且工作正常:
var PresetData = [taskInfo.presetList.length];
for( var i = 0; i < taskInfo.presetList.length; i++){
PresetData[i] = [ taskInfo.presetList[i].Name, "" + taskInfo.presetList[i].Category, "" + taskInfo.presetList[i].GUID ];
}
console.log("PresetData: " + JSON.stringify(PresetData));
this.connection.query( "INSERT INTO Preset (PresetName, PresetCategory, PresetGUID) VALUES ?", [PresetData], function(err, result) {
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.