nodejs进阶(6)—连接MySQL数据库
1. 建库连库
连接MySQL数据库需要安装支持
npm install mysql
我们需要提前安装按mysql sever端
建一个数据库mydb1
mysql> CREATE DATABASE mydb1;<br/> mysql> SHOW DATABASES;<br/> +--------------------+<br/> | Database |<br/> +--------------------+<br/> | information_schema |<br/> | mysql |<br/> | mydb1 |<br/> | performance_schema |<br/> +--------------------+<br/> rows in set (0.00 sec)
然后建一张表user如下
create table user( <br/> id int not null primary key auto_increment, <br/> name VARCHAR() not null, <br/> pwd VARCHAR() not null,<br/> create_date TIMESTAMP NULL DEFAULT now()<br/> )ENGINE=InnoDB DEFAULT CHARSET=utf8; <br/> CREATE UNIQUE INDEX t_quiz_IDX_0 on user(name);
接下来我们利用nodejs连接mysql数据库
var mysql = require('mysql'); //调用MySQL模块<br/> //创建一个connection <br/> var connection = mysql.createConnection({ <br/> host: 'localhost', //主机 <br/> user: 'root', //MySQL认证用户名 <br/> password: 'root', //MySQL认证用户密码 <br/> database: 'mydb1', <br/> port: '3306' //端口号 <br/> });<br/> //创建一个connection <br/> connection.connect(function(err){ <br/> if(err){ <br/> console.log('[query] - :'+err); <br/> return; <br/> } <br/> console.log('[connection connect] succeed!'); <br/> }); <br/> //----插入<br/> var userAddSql = 'insert into user (name,pwd) values(?,?)';<br/> var param = ['fff','123'];<br/> connection.query(userAddSql,param,function(err,rs){<br/> if(err){<br/> console.log('insert err:',err.message);<br/> return;<br/> }<br/> console.log('insert success');<br/> });<br/> //执行查询 <br/> connection.query('SELECT * from user where id=?',[2], function(err, rs) { <br/> if (err) { <br/> console.log('[query] - :'+err); <br/> return; <br/> } <br/> for(var i=0;i<rs.length;i++){<br/> console.log('The solution is: ', rs[i].uname); <br/> }<br/> }); //关闭connection <br/> connection.end(function(err){ <br/> if(err){ <br/> console.log(err.toString());<br/> return; <br/> } <br/> console.log('[connection end] succeed!'); <br/> });
但是实际每次创建连接都需要一定的开销,执行效率就会有影响。下面介绍一种连接池连mysql的方法:node-mysql
2. 连接池配置使用
node-mysql是目前最火的node下的mysql驱动,是mysqlpool的一个模块。
下面的代码是提供一个连接池,getPool函数返回createPool创建的数据库连接池对象。
var mysql = require('mysql'); //调用MySQL模块 <br/> function OptPool(){ <br/> this.flag=true; //是否连接过 <br/> this.pool = mysql.createPool({ <br/> host: 'localhost', //主机 <br/> user: 'root', //MySQL认证用户名 <br/> password: 'root', //MySQL认证用户密码 <br/> database: 'test', <br/> port: '3306' //端口号 <br/> }); <br/> <br/> this.getPool=function(){ <br/> return this.pool; <br/> } <br/> }; <br/> module.exports = OptPool;
下面的代码展示如何使用这个连接池,插入和查询的使用。需要注意的是conn.release(); //释放一个连接放回连接池 需要再操作结束后再执行,否则后面的数据库操作会报错。
var OptPool = require('./models/OptPool'); <br/> <br/> var optPool = new OptPool(); <br/> var pool = optPool.getPool(); //执行SQL语句 <br/> //从连接池中获取一个连接<br/> pool.getConnection(function(err,conn){ <br/> //----插入 <br/> var userAddSql = 'insert into user (uname,pwd) values(?,?)'; <br/> var param = ['eee','eee'];<br/> conn.query(userAddSql,param,function(err,rs){<br/> if(err){ <br/> console.log('insert err:',err.message); <br/> return; <br/> } <br/> console.log('insert success'); <br/> //conn.release(); //放回连接池<br/> })<br/> //查询 <br/> conn.query('SELECT * from user', function(err, rs) { <br/> if (err) { <br/> console.log('[query] - :'+err); <br/> return; <br/> } <br/> for(var i=0;i<rs.length;i++){<br/> console.log(rs[i].uname); <br/> }<br/> conn.release(); //放回连接池<br/> });<br/> });
下面介绍一个复杂一点的增删查改的数据库操作,因相互之间有依赖,所以代码可读性就变得特别差。这样就引出了我们接下来要介绍饿流程控制的内容《nodejs进阶(7)—async异步流程控制》
var OptPool = require('./models/OptPool'); <br/> <br/> var optPool = new OptPool(); <br/> var pool = optPool.getPool(); var insertSQL = 'insert into table1(name,pwd) values("conan","123"),("fens.me","456")';<br/> var selectSQL = 'select * from table1 limit 10';<br/> var deleteSQL = 'delete from table1';<br/> var updateSQL = 'update table1 set name="conan update" where name="conan"'; pool.getConnection(function(err,conn){ <br/> //delete<br/> conn.query(deleteSQL, function (err0, res0) {<br/> if (err0) console.log(err0);<br/> console.log("DELETE Return ==> ");<br/> console.log(res0); //insert<br/> conn.query(insertSQL, function (err1, res1) {<br/> if (err1) console.log(err1);<br/> console.log("INSERT Return ==> ");<br/> console.log(res1); //query<br/> conn.query(selectSQL, function (err2, rows) {<br/> if (err2) console.log(err2); console.log("SELECT ==> ");<br/> for (var i in rows) {<br/> console.log(rows[i]);<br/> } //update<br/> conn.query(updateSQL, function (err3, res3) {<br/> if (err3) console.log(err3);<br/> console.log("UPDATE Return ==> ");<br/> console.log(res3); //query<br/> conn.query(selectSQL, function (err4, rows2) {<br/> if (err4) console.log(err4); console.log("SELECT ==> ");<br/> for (var i in rows2) {<br/> console.log(rows2[i]);<br/> }<br/> });<br/> });<br/> });<br/> });<br/> });<br/> })
运行结果