gpt4 book ai didi

mysql - 在 node-mysql 中插入完成之前关闭连接

转载 作者:行者123 更新时间:2023-11-29 05:40:29 24 4
gpt4 key购买 nike

我的代码是

var thdb = require('./module/thdb.js');
var csv = require('./module/readcsv.js');

var db = new thdb.database('root','root','localhost','TH_DB');
var CSVdata= new Array();
var csv_row=0;
csv.readFile('data.txt',",",true,function(data){

CSVdata[csv_row]=data;
csv_row++;

},function(count){

for(var k=0;k<CSVdata.length;k++)
{
var data=CSVdata[k];

(function(){

var data_copy=data;
db.checkSymbol(data_copy.Symbol,function(exist){

if(exist)
{
//write log
console.log('Nost Inserting: '+data_copy.Symbol);
}
else {
//write log
var data_copy2=data_copy;
var db_copy=db;
console.log('Inserting: '+data_copy2.Symbol);
//insert


var DataObj = {
Exchange_id:1,
Currency_id:1,
symbol: data_copy2.Symbol,
name:data_copy2.Name
};

db_copy.insertSecurity(DataObj);

}//close exist else

});//close check db

})();
}
db.close();
});

我遇到了一个错误

Not Inserting: E
Not Inserting: X
Not Inserting: Z

Error: No database selected
at Function._packetToUserObject (/Users/saturngod/Dropbox/th/node_modules/mysql/lib/client.js:384:7)
at Query._handlePacket (/Users/saturngod/Dropbox/th/node_modules/mysql/lib/query.js:33:33)
at Client._handlePacket (/Users/saturngod/Dropbox/th/node_modules/mysql/lib/client.js:309:14)
at Parser.<anonymous> (native)
at Parser.emit (events.js:64:17)
at /Users/saturngod/Dropbox/th/node_modules/mysql/lib/parser.js:71:14
at Parser.write (/Users/saturngod/Dropbox/th/node_modules/mysql/lib/parser.js:576:7)
at Socket.<anonymous> (native)
at Socket.emit (events.js:64:17)
at Socket._onReadable (net.js:678:14)

如果我不关闭数据库连接,它工作正常。然而,我在循环结束时关闭数据库连接,我总是得到一个错误。

最佳答案

问题是 javascript 是异步的,所以你在那里做的大部分事情在 db.close 执行之后才会尝试运行。您拥有的 for 循环将调用 checkSymbol,但所做的只是发送查询。它会一直循环发送更多,然后关闭连接,然后如果恰好有响应进来,连接就会关闭。

我建议安装 Node 异步模块,以帮助解决其中的一些问题。 https://github.com/caolan/async#iterator

我从未使用过 thdb,但我假设 'insertSecurity' 有第二个参数,这是一个在插入完成时调用的函数。

这是一些示例代码。

var async = require('async');
var thdb = require('./module/thdb.js');
var csv = require('./module/readcsv.js');

var db = new thdb.database('root','root','localhost','TH_DB');

var dataFunctions = [];

function processData(data, callback) {

db.checkSymbol(data.Symbol, function(exist){

if(exist) {
console.log('Nost Inserting: '+data.Symbol);
callback();
}
else {
console.log('Inserting: '+data.Symbol);

var DataObj = {
Exchange_id:1,
Currency_id:1,
symbol: data.Symbol,
name: data.Name
};

db_copy.insertSecurity(DataObj, function () {
callback();
});
}
});
}

csv.readFile('data.txt', ',', true, function(data) {
dataFunctions.push(function(cb) {
processData(data, cb);
});
}, function (count) {
async.series(dataFunctions, function() {
console.log('Everything inserted!');

})
});

关于mysql - 在 node-mysql 中插入完成之前关闭连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7137419/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com