1. 建库连库

连接MySQL数据库需要安装支持

npm install mysql

我们需要提前安装按mysql sever端

建一个数据库mydb1

mysql> CREATE DATABASE mydb1;
mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| mydb1             |
| performance_schema |
+--------------------+
 rows in set (0.00 sec)

然后建一张表user如下

create table user(  
id int not null primary key auto_increment,  
name VARCHAR() not null,  
pwd VARCHAR() not null,
create_date TIMESTAMP NULL DEFAULT now()
)ENGINE=InnoDB DEFAULT CHARSET=utf8;  
CREATE UNIQUE INDEX t_quiz_IDX_0 on user(name);

接下来我们利用nodejs连接mysql数据库

 var mysql  = require('mysql');  //调用MySQL模块
 //创建一个connection  
 var connection = mysql.createConnection({      
     host: 'localhost',       //主机  
     user: 'root',               //MySQL认证用户名  
     password: 'root',        //MySQL认证用户密码  
     database: 'mydb1',  
     port: '3306'                   //端口号  
 });
 //创建一个connection  
 connection.connect(function(err){  
     if(err){         
         console.log('[query] - :'+err);  
         return;  
     }  
     console.log('[connection connect]  succeed!');  
 }); 
 //----插入
 var userAddSql = 'insert into user (name,pwd) values(?,?)';
 var param = ['fff','123'];
 connection.query(userAddSql,param,function(err,rs){
     if(err){
         console.log('insert err:',err.message);
         return;
     }
         console.log('insert success');
 });
 //执行查询  
 connection.query('SELECT * from user where id=?',[2], function(err, rs) {  
     if (err) {  
         console.log('[query] - :'+err);  
         return;  
     } 
     for(var i=0;i<rs.length;i++){
         console.log('The solution is: ', rs[i].uname); 
     }
 });   

 //关闭connection  
 connection.end(function(err){  
     if(err){ 
         console.log(err.toString());
         return;  
     }  
     console.log('[connection end] succeed!');  
 }); 

但是实际每次创建连接都需要一定的开销,执行效率就会有影响。下面介绍一种连接池连mysql的方法:node-mysql

2. 连接池配置使用

node-mysql是目前最火的node下的mysql驱动,是mysqlpool的一个模块。

下面的代码是提供一个连接池,getPool函数返回createPool创建的数据库连接池对象。

 var mysql  = require('mysql');  //调用MySQL模块 
 function OptPool(){ 
     this.flag=true; //是否连接过 
     this.pool = mysql.createPool({     
         host: 'localhost',       //主机 
         user: 'root',               //MySQL认证用户名 
         password: 'root',        //MySQL认证用户密码 
         database: 'test', 
         port: '3306'                   //端口号 
     }); 
  
     this.getPool=function(){ 
         return this.pool; 
     } 
 }; 
 module.exports = OptPool; 

下面的代码展示如何使用这个连接池,插入和查询的使用。需要注意的是conn.release(); //释放一个连接放回连接池 需要再操作结束后再执行,否则后面的数据库操作会报错。

 var OptPool = require('./models/OptPool'); 
  
 var optPool = new OptPool(); 
 var pool = optPool.getPool(); 

 //执行SQL语句 
 //从连接池中获取一个连接
 pool.getConnection(function(err,conn){ 
     //----插入 
     var userAddSql = 'insert into user (uname,pwd) values(?,?)'; 
     var param = ['eee','eee'];
     conn.query(userAddSql,param,function(err,rs){
         if(err){ 
             console.log('insert err:',err.message); 
             return; 
         } 
         console.log('insert success'); 
         //conn.release(); //放回连接池
     })
     //查询 
     conn.query('SELECT * from user', function(err, rs) { 
         if (err) { 
             console.log('[query] - :'+err); 
             return; 
         }   
         for(var i=0;i<rs.length;i++){
             console.log(rs[i].uname); 
         }
         conn.release(); //放回连接池
     });
 }); 

下面介绍一个复杂一点的增删查改的数据库操作,因相互之间有依赖,所以代码可读性就变得特别差。这样就引出了我们接下来要介绍饿流程控制的内容《nodejs进阶(7)—async异步流程控制

 var OptPool = require('./models/OptPool'); 
  
 var optPool = new OptPool(); 
 var pool = optPool.getPool(); 

 var insertSQL = 'insert into table1(name,pwd) values("conan","123"),("fens.me","456")';
 var selectSQL = 'select * from table1 limit 10';
 var deleteSQL = 'delete from table1';
 var updateSQL = 'update table1 set name="conan update"  where name="conan"';

 pool.getConnection(function(err,conn){ 
 //delete
     conn.query(deleteSQL, function (err0, res0) {
         if (err0) console.log(err0);
         console.log("DELETE Return ==> ");
         console.log(res0);

         //insert
         conn.query(insertSQL, function (err1, res1) {
             if (err1) console.log(err1);
             console.log("INSERT Return ==> ");
             console.log(res1);

             //query
             conn.query(selectSQL, function (err2, rows) {
                 if (err2) console.log(err2);

                 console.log("SELECT ==> ");
                 for (var i in rows) {
                     console.log(rows[i]);
                 }

                 //update
                 conn.query(updateSQL, function (err3, res3) {
                     if (err3) console.log(err3);
                     console.log("UPDATE Return ==> ");
                     console.log(res3);

                     //query
                     conn.query(selectSQL, function (err4, rows2) {
                         if (err4) console.log(err4);

                         console.log("SELECT ==> ");
                         for (var i in rows2) {
                             console.log(rows2[i]);
                         }
                     });
                 });
             });
         });
     });
 })

nodejs进阶(6)—连接MySQL数据库的更多相关文章

  1. Java进阶(二十五)Java连接mysql数据库(底层实现)

    Java进阶(二十五)Java连接mysql数据库(底层实现) 前言 很长时间没有系统的使用java做项目了.现在需要使用java完成一个实验,其中涉及到java连接数据库.让自己来写,记忆中已无从搜 ...

  2. Ruby 连接MySQL数据库

    使用Ruby连接数据库的过程还真的是坎坷,于是写点文字记录一下. 简介 Ruby简介 RubyGems简介 包管理之道 比较著名的包管理举例 细说gem 常用的命令 准备 驱动下载 dbi mysql ...

  3. PDO连接mysql数据库

    1.PDO简介 PDO(PHP Data Object) 是PHP 5 中加入的东西,是PHP 5新加入的一个重大功能,因为在PHP 5以前的php4/php3都是一堆的数据库扩展来跟各个数据库的连接 ...

  4. Windows操作系统下远程连接MySQL数据库

    用Eclipse做一个后台项目,但是数据库不想放在本地电脑,于是买了一个腾讯云服务器(学生有优惠,挺便宜的),装上MySQL数据库,但是测试连接的时候,发现总是连接不是上,但是本地数据库可以连接,于是 ...

  5. java 通过jdbc连接MySQL数据库

    先了解下JDBC的常用接口 1.驱动程序接口Driver 每种数据库的驱动程序都应该提供一个实现java.sql.Driver接口的类,简称Driver类.通常情况下,通过java.lang.Clas ...

  6. JDBC连接MySQL数据库代码模板

    下面这个例子是最简单的JDBC连接MySQL数据库的例子. 一般步骤: 1.注册驱动: 2.建立连接: 3.创建语句: 4.处理结果: 5.释放资源. 注意: 1.软件开发环境:MyEclipse 8 ...

  7. PHP如何连接MySQL数据库

    * PHP连接MySQL数据库 * 准备工作 * 在XAMPP软件的安装目录/php/ext目录中 * php_mysql.dll和php_mysqli.dll文件必须存在 * 在XAMPP软件的安装 ...

  8. JSP连接MySQL数据库问题

    之前写了一大段,还说了一下具体JDBC连接数据库API的具体包的基本知识,哪知道自己手残不小心按了删除按钮.结果去看自动保存记录时,就只剩下下面这段了.好吧,其实最主要最核心的也就是下面这点了.具体如 ...

  9. java连接mysql数据库详细步骤解析

    java连接mysql数据库详细步骤解析      第一步:下载一个JDBC驱动包,例如我用的是:mysql-connector-java-5.1.17-bin.jar      第二步:导入下载的J ...

随机推荐

  1. MQTT开发笔记之《安全传输-自问自答》

    Mosquito使用SSL/TLS进行安全通信时的使用方法:http://www.it165.net/pro/html/201404/12615.htmljava版mosquitto客户端使用SSL功 ...

  2. Asp.net mvc 添加Jquery UI

    1.使用NuGet下载jquery ui Install-Package jQuery.UI.Combined 2.下载多语言文件: development-bundle/i18n目录下是jquery ...

  3. Python IDE: Eclipse + PyDev

    依次下载 Python.Django(并安装好).JAVA.Eclipse.Eclipse 中文语言包(http://www.eclipse.org/babel/downloads.php).PyDe ...

  4. style=&quot;visibility: hidden&quot; 和 style=“display:none”区别

    大多数人很容易将CSS属性display和visibility混淆,它们看似没有什么不同,其实它们的差别却是很大的. visibility属性用来确定元素是显示还是隐藏的,这用visibility=& ...

  5. 【leetcode】Substring with Concatenation of All Words (hard) ★

    You are given a string, S, and a list of words, L, that are all of the same length. Find all startin ...

  6. zju(7)ADC操作实验

    1.实验目的 1.学习和掌握S3C2410下ADC接口的操作方法以及应用程序的编写: 二.实验内容 1.编写EduKit-IV实验箱Linux操作系统下按键ADC的应用程序,并显示ADC的值. 三.主 ...

  7. Swift基础语法 、 元组(Tuple)

    字符串的使用 1.1 问题 Swift的String和Character类型提供了一个快速的,兼容Unicode的方式来处理代码中的文本信息.创建和操作字符串的语法与C语言中字符串类似.本案例将学习如 ...

  8. linux中的进程管理

    USER  那个用户启动的进程 PID     该进程的ID号 %CPU   占用的CPU百分比 %MEM   占用的物理内存百分比 VSZ      占用虚拟内存大小 KB RSS      占用实 ...

  9. js中初学函数的使用

    <script> function SetColor(name,value) { var oDiv=document.getElementById('div3'); oDiv.style[ ...

  10. BZOJ3571 : [Hnoi2014]画框

    题目是要求最小乘积最小权匹配, 将一种方案看做一个二维点(x,y),x=a值的和,y=b值的和,所有方案中只有在下凸壳上的点才有可能成为最优解 首先要求出两端的方案l,r两个点 l就是a值的和最小的方 ...