nodejs连接mysql数据库_nodejs进阶(6)—连接MySQL数据库

1. 建库连库

连接MySQL数据库需要安装支持

npm install mysql

我们需要提前安装按mysql sever端

建一个数据库mydb1

mysql>CREATE DATABASE mydb1;

mysql>SHOW DATABASES;+--------------------+

| Database |

+--------------------+

| information_schema |

| mysql |

| mydb1 |

| performance_schema |

+--------------------+

4 rows in set (0.00 sec)

然后建一张表user如下

create table user(

idint not nullprimary key auto_increment,

name VARCHAR(100) not null,

pwd VARCHAR(100) not null,

create_date TIMESTAMP NULL DEFAULT now()

)ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE UNIQUE INDEX t_quiz_IDX_0 on user(name);

接下来我们利用nodejs连接mysql数据库

1 var mysql  = require('mysql');  //调用MySQL模块

2 //创建一个connection

3 var connection =mysql.createConnection({4     host: 'localhost',       //主机

5     user: 'root',               //MySQL认证用户名

6     password: 'root',        //MySQL认证用户密码

7     database: 'mydb1',8     port: '3306'                   //端口号

9 });10 //创建一个connection

11 connection.connect(function(err){12     if(err){13         console.log('[query] - :'+err);14         return;15 }16     console.log('[connection connect]  succeed!');17 });18 //----插入

19 var userAddSql = 'insert into user (name,pwd) values(?,?)';20 var param = ['fff','123'];21 connection.query(userAddSql,param,function(err,rs){22     if(err){23         console.log('insert err:',err.message);24         return;25 }26         console.log('insert success');27 });28 //执行查询

29 connection.query('SELECT * from user where id=?',[2], function(err, rs) {30     if(err) {31         console.log('[query] - :'+err);32         return;33 }34     for(var i=0;i

39 //关闭connection

40 connection.end(function(err){41     if(err){42 console.log(err.toString());43         return;44 }45     console.log('[connection end] succeed!');46 });

但是实际每次创建连接都需要一定的开销,执行效率就会有影响。下面介绍一种连接池连mysql的方法:node-mysql

2. 连接池配置使用

node-mysql是目前最火的node下的mysql驱动,是mysqlpool的一个模块。

下面的代码是提供一个连接池,getPool函数返回createPool创建的数据库连接池对象。

1 var mysql  = require('mysql');  //调用MySQL模块

2 functionOptPool(){3     this.flag=true; //是否连接过

4     this.pool =mysql.createPool({5         host: 'localhost',       //主机

6         user: 'root',               //MySQL认证用户名

7         password: 'root',        //MySQL认证用户密码

8         database: 'test',9         port: '3306'                   //端口号

10 });11 12     this.getPool=function(){         return this.pool;21 }22 };23 module.exports = OptPool;

下面的代码展示如何使用这个连接池,插入和查询的使用。需要注意的是conn.release(); //释放一个连接放回连接池 需要再操作结束后再执行,否则后面的数据库操作会报错。

1 var OptPool = require('./models/OptPool');2 3 var optPool = newOptPool();4 var pool =optPool.getPool();5

6 //执行SQL语句

7 //从连接池中获取一个连接

8 pool.getConnection(function(err,conn){9     //----插入

10     var userAddSql = 'insert into user (uname,pwd) values(?,?)';11     var param = ['eee','eee'];12     conn.query(userAddSql,param,function(err,rs){13         if(err){14             console.log('insert err:',err.message);15             return;16 }17         console.log('insert success');18         //conn.release(); //放回连接池

19 })20     //查询

21     conn.query('SELECT * from user', function(err, rs) {22         if(err) {23             console.log('[query] - :'+err);24             return;25 }26         for(var i=0;i

30 });31 });

下面介绍一个复杂一点的增删查改的数据库操作,因相互之间有依赖,所以代码可读性就变得特别差。这样就引出了我们接下来要介绍饿流程控制的内容《nodejs进阶(7)—async异步流程控制》

1 var OptPool = require('./models/OptPool');2 3 var optPool = newOptPool();4 var pool =optPool.getPool();5

6 var insertSQL = 'insert into table1(name,pwd) values("conan","123"),("fens.me","456")';7 var selectSQL = 'select * from table1 limit 10';8 var deleteSQL = 'delete from table1';9 var updateSQL = 'update table1 set name="conan update" where name="conan"';10

11 pool.getConnection(function(err,conn){12 //delete

13 conn.query(deleteSQL, function(err0, res0) {14 if(err0) console.log(err0);15 console.log("DELETE Return ==> ");16 console.log(res0);17

18 //insert

19 conn.query(insertSQL, function(err1, res1) {20 if(err1) console.log(err1);21 console.log("INSERT Return ==> ");22 console.log(res1);23

24 //query

25 conn.query(selectSQL, function(err2, rows) {26 if(err2) console.log(err2);27

28 console.log("SELECT ==> ");29 for (var i inrows) {30 console.log(rows[i]);31 }32

33 //update

34 conn.query(updateSQL, function(err3, res3) {35 if(err3) console.log(err3);36 console.log("UPDATE Return ==> ");37 console.log(res3);38

39 //query

40 conn.query(selectSQL, function(err4, rows2) {41 if(err4) console.log(err4);42

43 console.log("SELECT ==> ");44 for (var i inrows2) {45 console.log(rows2[i]);46 }47 });48 });49 });50 });51 });52 })

运行结果

4d0f77059b5c3c4bc0a8b4f9aeb12549.png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值