简体   繁体   中英

Error: read ECONNRESET when inserting data into table

I followed this tutorial ( Tutorial Insert multiple rows at a time ) to insert multiple rows data into a MySQL table (chapter 'Insert multiple rows at a time').

I did the same with my code but I got an ECONNRESET error instead of my connection if good enough with the database.

The error details below:

{ Error: read ECONNRESET
    at _errnoException (util.js:1022:11)
    at TCP.onread (net.js:628:25)
    --------------------
    at Protocol._enqueue (C:\Users\frederic.fayet\Desktop\DEV\NodeJS\TER_V1 - Reprise après pause\node_modules\mysql\lib\protocol\Protocol.js:144:48)
    at Connection.query (C:\Users\frederic.fayet\Desktop\DEV\NodeJS\TER_V1 - Reprise après pause\node_modules\mysql\lib\Connection.js:200:25)
    at C:\Users\frederic.fayet\Desktop\DEV\NodeJS\TER_V1 - Reprise après pause\app.js:340:24
    at handlePromises (C:\Users\frederic.fayet\Desktop\DEV\NodeJS\TER_V1 - Reprise après pause\app.js:242:9)
    at promise.then (C:\Users\frederic.fayet\Desktop\DEV\NodeJS\TER_V1 - Reprise après pause\app.js:251:20)
    at <anonymous>
    at process._tickCallback (internal/process/next_tick.js:188:7)
  code: 'ECONNRESET',
  errno: 'ECONNRESET',
  syscall: 'read',
  fatal: true }

My code is below for querying the database:

db.query(sqlSchedules, [sqlDataSchedules], function (err, result) {
                        if (err) {
                            console.log(err);
                            return; //throw err;
                        }
                        //Get the number of inserted lines:
                        nbLinesSchedulesInserted = result.affectedRows;
                        console.log("Nombre d'éléments insérés : " + result.affectedRows);
                    });

And the database connection is:

db.connect(function(err) {
        if (err) console.error('Error occured during the DB connection.'); 
        console.log("DB connection: OK"); 
    });

The sqlDataSchedules is an array that looks like:

[ [ '848633',
    'Amiens',
    '162700',
    '162700',
    '20190509',
    '20190702',
    2019-05-31T07:27:09.710Z ],
  [ '848633',
    'Villers-Bretonneux',
    '163800',
    '163900',
    '20190509',
    '20190702',
    2019-05-31T07:27:09.710Z ],
  [ '849401',
    'St Quentin',
    '074500',
    '074500',
    '20190527',
    '20190528',
    2019-05-31T07:27:09.711Z ],
  ... 141377 more items ]

And the SQL request is:

INSERT INTO schedules (trainNumber, stopName, baseArrivalTime, baseDepartureTime, beginDate, endDate, updatedOn) VALUES ?

Just change the MySQL max_allowed_packet. For example:

max_allowed_packet=100M

in my.ini or my.cnf. (Don't forget to restart the MySQL instance service) It solved my problem.

I finally found a solution using for loop and async function:

async function loopOverRequests(data, sqlRequest, tableName) {
    let nbRequests = 0;
    for (var i = 0; i<data.length; i++) {
        nbRequests = nbRequests + await makeTheRequest(data[i], sqlRequest);
    }
    console.log(nbRequests + ' imported in the table `'+ tableName + '`.');
    return new Promise((resolve, reject) => {
        resolve(nbRequests);
    });
}

function makeTheRequest(el, sqlRequest) {
    return new Promise((resolve, reject) => {
        db.query(sqlRequest, el, function (err, result) {
            if (err) {
                console.log(err);
                reject(err); //throw err;
            } else {
                resolve(result.affectedRows);
            }
        });
    });
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM