node基础14:连接数据库
1.连接数据库
node本身没有连接数据库的功能,需要安装一些中间库来支持。本节,我讲学习连接mysql。
首先需要安装mysql,需要去mysql官网下载mysql,并安装。也需要安装一个mysql可视化管理工具,这个也可以在mysql官网下载。
第一步:
去官网下载好mysql,并且安装。如果是mac os 系统,必须记下localhost服务器的初始密码(截图),安装好了之后,新建一个database,这时候提醒你,需要更改初始密码。更改初始密码之后,你才可以进行mysql指令的操作。
第二步:
第三步:
/** * Created by gaoxiong on 2017/1/7. */ var mysql = require('mysql'); //create a connect object var connection = mysql.createConnection({ host:'localhost', user:'root', password:'12345678', database:'school', port:'3306' }); //connect database connection.connect(function(err){ if(err){ console.log('connect-'+err); return; } console.log('connected successful'); }); var userAddSql = 'insert into user (uname, password) values(?, ?)'; var param = ['gaoxiong', '123456']; connection.query(userAddSql, param, function(err, result){ if(err){ console.log('query',err.message); return; } else { console.log('insert sucessful'); } }) connection.query('select * from user', function(err,result,fields){ if(err){ console.log('err',err.message); }else { console.log(result[0]); console.log(fields);//内容比较多 } }) // close connect connection.end(function(err){ if(err){ console.log(' close connect-'+err); return; } console.log('close successful'); });
以上就完成连接数据库,并且插入一条数据的功能。需要注意的是数据库查询的语句都是异步的。以上连接的方法叫做 直接连接,非常消耗内存。
2.连接池连接
先理解概念,何为连接池连接:通俗的理解,一开始就建立了很多条连接(这些连接组成了一个连接池),当你需要需要的时候,取出一条连接线,在这条连接线使用完成之后,将其释放,这条连接线就会回到连接池中。
这种连接池连接也是前辈造好的轮子(中间库),名字叫做 node-mysql,需要全局安装。
npm install -g node-mysql
代码如下:
/** * mysqlPool.js * Created by gaoxiong on 2017/1/7. */ var mysql = require('mysql'); function optPool() { this.isConnected = true; this.pool = mysql.createPool({ host:'localhost', user:'root', password:'12345678', database:'school', port:'3306' }); this.getPool = function(){ if (this.isConnected){ this.pool.on('connection', function(connection){ connection.query('SET SESSION auto_increment_increment = 1'); this.isConnected = false; }) } return this.pool; }; } module.exports = optPool;
/** * pool.js * Created by gaoxiong on 2017/1/7. */ var OptPool = require('./mysqlPool'); //创建连接池 var optPool = new OptPool(); var pool = optPool.getPool(); //从连接池中获取一个连接 pool.getConnection(function(err, conn){ console.log(' begin insert'); var userAddSql = ' insert into user (uname, password) values(?,?)'; var prama = ['gaoxiong','123456']; conn.query(userAddSql, prama, function(err,res) {// 异步操作了 if(err){ console.log(err); return; } else { console.log(res); console.log('insert successful'); }; }); console.log('insert end'); console.log('begin select ') conn.query(' select * from user ', function(err,res) {// 异步操作了 if(err){ console.log(err); return; } else { console.log(res[0]); }; conn.release();//放回连接池 }); console.log('select over'); });
在终端中执行:node pool.js 就可以看到效果了,哈哈哈哈啊哈哈。nice啊。