配色: 字号:
nodejs进阶(6)—连接MySQL数据库
2017-01-07 | 阅:  转:  |  分享 
  
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});

献花(0)
+1
(本文系thedust79首藏)