Node连接mysql数据库方法介绍
使用Node做Web开发,基本上都是使用NoSQL数据库,最频繁的就是使用MongoDB了,自己做了一些简单的Web开发,为了降低学习门槛,一直使用MySQL来做数据库。这里简单介绍一下连接MySQL数据库的方式,希望能帮助到其他人。
npminstall--savemysql
使用上述命令安装完MySQL的模块后,就可以直接使用了,官网的DOCS里一个简单的例子如下就可以入门了。
varmysql=require('mysql');
varconnection=mysql.createConnection({
host:'localhost',
user:'me',
password:'secret',
database:'my_db'
});
connection.connect();
connection.query('SELECT1+1ASsolution',function(err,rows,fields){
if(err)throwerr;
console.log('Thesolutionis:',rows[0].solution);
});
connection.end();
很简单的一个例子,从上面的例子可以得出:使用createConnection(option)方法创建一个连接对象,然后连接对象的connect()方法创建连接,最后使用query()方法执行SQL语句,返回结果作为回调函数的参数rows返回,rows为数组类型。
1.连接
创建连接对象,需要传入连接数据库的一些连接参数,也就是createConnection(option)里的option,option是一个对象,以键值对的形式传入createConnection()方法里。上例列举出了最基本的参数:
- host主机名
- user连接数据库的用户
- password密码
- database数据库名称
还有其他的参数,可以查询下官方DOCS,这里不一一列举了,初期学习上面这些参数就足以。
2.关闭
关闭一个连接使用end()方法,end()方法提供一个回调函数,如下:
connect.end(function(err){
console.log('Endaconnection');
});
这是建议使用的方法,end()方法会等待连接回调完成后才关闭连接。官方还提供了另外一种方法destroy()方法,这个方法直接关闭连接,不会等待回调完成。
举个简单的例子:
varmysql=require('mysql');
varoption=require('./connect.js').option;
varconn=mysql.createConnection(option);
conn.query('select*frommessage',function(err,rows,fields){
if(!err){
console.log(rows);
}
});
conn.end(function(err){
console.log('endaconnection');
});
最终结果会是:先打印完SELECT数据表结果后,再打印endaconnection。而如果你将关闭方法换成conn.destroy();,那么你就别想返回任何结果了,因为还没等回调结束就已经终止连接了。
3.连接池
连接池的原理是一开始就给你创建多个连接对象放在一个“池子”里,用的时候取一个,用完了放回“池子”里,在一定程度上是有利于节省系统开销的,因为连接对象是在最开始的时候就创建好了,使用的时候不再需要系统开销去创建数据库连接对象。官方DOCS介绍了连接方法:
varmysql=require('mysql');
varpool=mysql.createPool({
connectionLimit:10,
host:'example.org',
user:'bob',
password:'secret',
database:'my_db'
});
pool.query('SELECT1+1ASsolution',function(err,rows,fields){
if(err)throwerr;
console.log('Thesolutionis:',rows[0].solution);
});
创建连接池的方法是createPool(option),option里多了一个参数connectionLimit指的是一次性在连接池里创建多少个连接对象,默认10个。如果你想共享一个连接对象,可以使用下面方法进行连接;
varmysql=require('mysql');
varpool=mysql.createPool({
host:'example.org',
user:'bob',
password:'secret',
database:'my_db'
});
pool.getConnection(function(err,connection){
//Usetheconnection
connection.query('SELECTsomethingFROMsometable',function(err,rows){
//Anddonewiththeconnection.
connection.release();
//Don'tusetheconnectionhere,ithasbeenreturnedtothepool.
});
//Usetheconnection
connection.query('SELECTsomething2FROMsometable2',function(err,rows){
//Anddonewiththeconnection.
connection.release();
//Don'tusetheconnectionhere,ithasbeenreturnedtothepool.
});
});
使用一个连接对象执行两次query()函数。
4.示例1
使用基本的连接方式来连接数据库,分别定义数据连接以及关闭的function,如下示例:
//connect.js数据库连接与关闭
varmysql=require('mysql');
varconfig=require('./config.json');//将数据库连接参数写入mysql对象,即config.mysql
varconnCount=0;//统计目前未关闭的连接
exports.getConn=function(){
connCount++;
console.log('............................OPENaconnection,has'+connCount+'connection.');
returnmysql.createConnection(config.mysql);
};
exports.endConn=function(conn){
conn.end(function(err){
if(!err){
connCount--;
console.log('.........................CLOSEaconnection,has'+connCount+'connection.');
}
});
};
然后给个使用数据库的示例,
//db.js查询用户信息
varconnect=require('./connect.js');//引入数据连接方法
exports.getUser=function(username,callback){
varconnection=connect.getConn();
varsql='select*fromuserwhereusername="'+username+'"';
connection.query(sql,function(err,rows,fields){
callback(err,rows,fields);
});
connect.endConn(connection);
}
5.示例2
使用数据库连接池,同样先创建数据库连接池的方法,如下两种方式:
//connect.js直接使用
varmysql=require('mysql');
varconfig=require('./config.json');
varpool=mysql.createPool(config.mysql);
exports.querySQL=function(sql,callback){
pool.query(sql,function(err,rows,fields){
callback(err,rows,fields);
});
}
//connect.js使用getConnection方法
varmysql=require('mysql');
varconfig=require('./config.json');
varpool=mysql.createPool(config.mysql);
exports.querySQL=function(sql,callback){
pool.getConnection(function(err,conn){
conn.query(sql,function(err,rows,fields){
callback(err,rows,fields);
conn.release();//不要忘了释放
});
});
}
使用的时候,直接使用querySQL方法即可,如下:
//db.js查询用户信息
varconnect=require('./connect.js');
exports.getUser=function(username,callback){
varsql='select*fromuserwhereusername="'+username+'"';
connect.querySQL(sql,function(err,rows,fields){
callback(err,rows,fields);
});
};
官方是推荐使用连接池的方式进行连接的,但是,是直接使用pool.query()连接还是pool.getConnection()的方法来连接,官方并没有介绍其优劣,我简单做了个测试,貌似这两种方式并没有多大的区别,也就没再研究,有知道的烦请告知,谢了~
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。