Node.js与mysql

1. 安装mysql

2. 安装node.js driver for mysql

    npm install mysql

    ※注意点:安装前先把目录cd到node.exe所在目录下,这样执行安装命令时,会找到目录下node_modules,并安装在此目录下。

3. 与mysql交互

  • 建立数据库连接:createConnection(Object)方法

                该方法接受一个对象作为参数,该对象有四个常用的属性host,user,password,database。与php中链接数据库的参数相同。

  • CRUD
var mysql = require('mysql');

// 创建一个connection
var connection = mysql.createConnection({
    host     : 'localhost',
    user     : 'root',
    password : 'root',
    port     : '3306',
    database : 'nodesample'
});

connection.connect(function(err) {
    if (err) {
        console.log('[query] - :' + err);
        return;
    }

    console.log('[connection connect] succeed!\n\n');
});

var userAddSql = 'INSERT INTO userinfo(UserName,UserPass) VALUES(?,?)';
var userAddSql_Params = ['Betty', '123456'];

// INSERT
connection.query(userAddSql, userAddSql_Params, function(err, result) {
    if(err) {
        console.log('[INSERT ERROR] - ', err.message);
        return;
    }

    console.log('--------------------------INSERT--------------------------');
    // console.log('INSERT ID:', result);
    console.log('INSERT affectedRows:', result.affectedRows);
    console.log('----------------------------------------------------------\n\n');
});

var  userModSql = 'UPDATE userinfo SET UserPass = ? WHERE UserName = ?';
var  userModSql_Params = ['111111', 'Betty'];

// UPDATE
connection.query(userModSql,userModSql_Params,function (err, result) {
   if(err){
         console.log('[UPDATE ERROR] - ',err.message);
         return;
   }        
  console.log('--------------------------UPDATE----------------------------');
  console.log('UPDATE affectedRows',result.affectedRows);
  console.log('------------------------------------------------------------\n\n');
});

var  userGetSql = 'SELECT * FROM userinfo WHERE UserName = ?';
var  userGetSql_Param = ['Betty'];
// SELECT
connection.query(userGetSql, userGetSql_Param, function (err, result) {
        if(err){
          console.log('[SELECT ERROR] - ',err.message);
          return;
        }        

       console.log('--------------------------SELECT----------------------------');
       console.log(result);        
       console.log('------------------------------------------------------------\n\n');
});

var  userDelSql = 'DELETE FROM userinfo WHERE UserName = ?';
var  userDelSql_Param = ['Betty'];
// DELETE
connection.query(userDelSql, userDelSql_Param, function (err, result) {
        if(err){
          console.log('[DELETE ERROR] - ',err.message);
          return;
        }        

       console.log('--------------------------DELETE----------------------------');
       console.log('DELETE affectedRows',result.affectedRows);
       console.log('------------------------------------------------------------\n\n');  
});

connection.end();

  • 结束数据库连接end()和destroy()
end()接受一个回调函数,并且会在query结束之后才触发,如果query出错,仍然会终止链接,错误会传递到回调函数中处理。

destroy()立即终止数据库连接,即使还有query没有完成,之后的回调函数也不会在触发。

  • 创建连接池 createPool(Object)  Object和createConnection参数相同。

connection.release()释放链接到连接池。如果需要关闭连接并且删除,需要使用connection.destroy()。

  • 处理服务器连接断开
var mysql = require('mysql');

var db_config = {
  host     : 'localhost',       
  user     : 'root',              
  password : 'root',       
  port: '3306',                   
  database: 'nodesample'  
};

var connection;

function handleDisConnect() {
    connection = mysql.createConnection(db_config);
    connection.connect(function(err) {
        if(err) {                                     
            console.log("进行断线重连:" + new Date());
            setTimeout(handleDisConnect, 2000);   //2秒重连一次
            return;
        }
        console.log("连接成功");
    });

    connection.on('error', function(err) {
        console.log('db error', err);
        if(err.code == 'PROTOCOL_CONNECTION_LOST') {                                     
              handleDisConnect();
        } else if (err.code == 'ECONNRESET'){
            handleDisConnect();
        } else {
            throw err;
        }
     });
}

handleDisConnect();

更多详细内容请参照:https://github.com/mysqljs/mysql


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值