nodejs进阶(6)—连接MySQL数据库
1.建库连库
连接MySQL数据库需要安装支持
npminstallmysql
我们需要提前安装按mysqlsever端
建一个数据库mydb1
复制代码
mysql>CREATEDATABASEmydb1;
mysql>SHOWDATABASES;
+--------------------+
|Database|
+--------------------+
|information_schema|
|mysql|
|mydb1|
|performance_schema|
+--------------------+
4rowsinset(0.00sec)
复制代码
然后建一张表user如下
复制代码
createtableuser(
idintnotnullprimarykeyauto_increment,
nameVARCHAR(100)notnull,
pwdVARCHAR(100)notnull,
create_dateTIMESTAMPNULLDEFAULTnow()
)ENGINE=InnoDBDEFAULTCHARSET=utf8;
CREATEUNIQUEINDEXt_quiz_IDX_0onuser(name);
复制代码
接下来我们利用nodejs连接mysql数据库
复制代码
1varmysql=require(''mysql'');//调用MySQL模块
2//创建一个connection
3varconnection=mysql.createConnection({
4host:''localhost'',//主机
5user:''root'',//MySQL认证用户名
6password:''root'',//MySQL认证用户密码
7database:''mydb1'',
8port:''3306''//端口号
9});
10//创建一个connection
11connection.connect(function(err){
12if(err){
13console.log(''[query]-:''+err);
14return;
15}
16console.log(''[connectionconnect]succeed!'');
17});
18//----插入
19varuserAddSql=''insertintouser(name,pwd)values(?,?)'';
20varparam=[''fff'',''123''];
21connection.query(userAddSql,param,function(err,rs){
22if(err){
23console.log(''inserterr:'',err.message);
24return;
25}
26console.log(''insertsuccess'');
27});
28//执行查询
29connection.query(''SELECTfromuserwhereid=?'',[2],function(err,rs){
30if(err){
31console.log(''[query]-:''+err);
32return;
33}
34for(vari=0;i 35console.log(''Thesolutionis:'',rs[i].uname);
36}
37});
38
39//关闭connection
40connection.end(function(err){
41if(err){
42console.log(err.toString());
43return;
44}
45console.log(''[connectionend]succeed!'');
46});
复制代码
但是实际每次创建连接都需要一定的开销,执行效率就会有影响。下面介绍一种连接池连mysql的方法:node-mysql
2.连接池配置使用
node-mysql是目前最火的node下的mysql驱动,是mysqlpool的一个模块。
下面的代码是提供一个连接池,getPool函数返回createPool创建的数据库连接池对象。
复制代码
1varmysql=require(''mysql'');//调用MySQL模块
2functionOptPool(){
3this.flag=true;//是否连接过
4this.pool=mysql.createPool({
5host:''localhost'',//主机
6user:''root'',//MySQL认证用户名
7password:''root'',//MySQL认证用户密码
8database:''test'',
9port:''3306''//端口号
10});
11
12this.getPool=function(){
returnthis.pool;
21}
22};
23module.exports=OptPool;
复制代码
下面的代码展示如何使用这个连接池,插入和查询的使用。需要注意的是conn.release();//释放一个连接放回连接池需要再操作结束后再执行,否则后面的数据库操作会报错。
复制代码
1varOptPool=require(''./models/OptPool'');
2
3varoptPool=newOptPool();
4varpool=optPool.getPool();
5
6//执行SQL语句
7//从连接池中获取一个连接
8pool.getConnection(function(err,conn){
9//----插入
10varuserAddSql=''insertintouser(uname,pwd)values(?,?)'';
11varparam=[''eee'',''eee''];
12conn.query(userAddwww.tt951.comSql,param,function(err,rs){
13if(err){
14console.log(''inserterr:'',err.message);
15return;
16}
17console.log(''insertsuccess'');
18//conn.release();//放回连接池
19})
20//查询
21conn.query(''SELECTfromuser'',function(err,rs){
22if(err){
23console.log(''[query]-:''+err);
24return;
25}
26for(vari=0;i 27console.log(rs[i].uname);
28}
29conn.release();//放回连接池
30});
31});
复制代码
下面介绍一个复杂一点的增删查改的数据库操作,因相互之间有依赖,所以代码可读性就变得特别差。这样就引出了我们接下来要介绍饿流程控制的内容《nodejs进阶(7)—async异步流程控制》
复制代码
1varOptPool=require(''./models/OptPool'');
2
3varoptPool=newOptPool();
4varpool=optPool.getPool();
5
6varinsertSQL=''insertintotable1(name,pwd)values("conan","123"),("fens.me","456")'';
7varselectSQL=''selectfromtable1limit10'';
8vardeleteSQL=''deletefromtable1'';
9varupdateSQL=''updatetable1setname="conanupdate"wherename="conan"'';
10
11pool.getConnectiwww.baiyuewang.neton(function(err,conn){
12//delete
13conn.query(deleteSQL,function(err0,res0){
14if(err0)console.log(err0);
15console.log("DELETEReturn==>");
16console.log(res0);
17
18//insert
19conn.query(insertSQL,function(err1,res1){
20if(err1)console.log(err1);
21console.log("INSERTReturn==>");
22console.log(res1);
23
24//query
25conn.query(selectSQL,function(err2,rows){
26if(err2)console.log(err2);
27
28console.log("SELECT==>");
29for(variinrows){
30console.log(rows[i]);
31}
32
33//update
34conn.query(updateSQL,function(err3,res3){
35if(err3)console.log(err3);
36console.log("UPDATEReturn==>");
37console.log(res3);
38
39//query
40conn.query(selectSQL,function(err4,rows2){
41if(err4)console.log(err4);
42
43console.log("SELECT==>");
44for(variinrows2){
45console.log(rows2[i]);
46}
47});
|
|