Node.js实现MySQL数据库连接池

  • 1 什么是数据库连接池
  • 2 原理及优点
  • 3 连接池的作用
  • 4 实现连接池
    • 4.1 导入mysql模块
    • 4.2 创建数据库连接池
    • 4.3 从连接池中获取一个连接
    • 4.4 释放连接对象(放回连接池)
    • 4.5 从连接池中移除连接对象
    • 4.6 关闭该连接池
  • 5 案例

1 什么是数据库连接池

数据库连接池是程序启动时建立足够数量的数据库连接对象,并将这些连接对象组成一个池,由程序动态地对池中的连接对象进行申请、使用和释放。

2 原理及优点

数据库连接池在初始化时将会创建一定数量的数据库连接对象放到连接池中,连接池都将一直保证至少拥有这么多的连接数量,当有数据库需要被连接的时候,它会向数据库连接池申请资源和使用,使用完成后会释放到数据库连接池中。当然数据库连接池中拥有最小连接数量和最大连接数量,当数据库的连接超过连接池中最大的数量的时候,这些请求将被加入到等待队列中。

用服装店招聘导购来说明数据库连接池。当只有顾客A时,服装店招聘一个导购A,如果之后顾客B、C、D、E、F…也来了,那么就需要不断招聘导购B、C、D、E、F…,这样会带来大量的人力成本。

如果让一个主管去管理一定数量(以5为例)的导购,当顾客A、B、C、D、E来了,主管依次分配了导购A、B、C、D、E,但如果顾客F来了,由于已经没有空闲的导购了,因此顾客F需要排队等待。

等A、B、C、D、E导购其中任何一个服务完成后(比如说导购D),他又重新回到了导购组中,这时主管会将他分配给顾客F。

数据库的链接池也是这个意思,当网站某一天有很大的流量的时候,数据库服务器需要为每次链接创建一次数据库链接。这样就很浪费数据库的资源,并且频繁的创建和关闭数据库的链接,很容易导致服务器内存溢出等情况发生。

3 连接池的作用

数据库的连接池负责分配、管理和释放数据库连接对象的。它允许应用程序重复使用一个现有的数据库的连接对象。而不是重新创建一个。

4 实现连接池

4.1 导入mysql模块

首先安装mysql模块:

npm install mysql

导入mysql模块:

const mysql = require("mysql");

4.2 创建数据库连接池

创建数据库连接池语法如下:

const pool = mysql.createPool({host: "数据库服务器地址",port: 3306, // MySQL数据库端口号database: "数据库名",user: "连接数据库的用户名",password: "连接数据库的密码",connectionLimit: "指定连接池中最大的链接数,默认是10",queueLimit: "指定允许挂起的最大连接数,如果挂起的连接数超过该数值,就会立刻抛出错误,默认属性值为0,代表不允许被挂起的最大连接数",multipleStatements: "是否运行执行多条sql语句,默认值为false"
})

示例:创建数据库连接池

const mysql = require("mysql");
const pool = mysql.createPool({host: "127.0.0.1", // 主机地址port: 3306,database: "info", // 数据库名字user: "root", // 连接数据库的用户名password: "123456", // 连接数据库密码connectionLimit: 20, // 连接池最大连接数multipleStatements: true // 允许执行多条sql语句
})
module.exports = pool;

4.3 从连接池中获取一个连接

语法:

pool.getConnection(function (err, connection) {// 代码
});

err:该参数是指操作失败时的错误对象。
connection:该值为一个对象,代表获取到的连接对象。当连接失败时,该值为undefined。

4.4 释放连接对象(放回连接池)

connection.release();

4.5 从连接池中移除连接对象

connection.destory();

4.6 关闭该连接池

pool.end();

5 案例

使用连接池连接MySQL数据库,查询info数据库中stu表中的所有信息,stu表具体如下:

创建mydb.js,创建数据库连接池,代码如下:

const mysql = require("mysql");// 创建数据库连接池
const pool = mysql.createPool({host: "localhost",port: 3306,user: "root",password: "123456",database: "info",connectionLimit: 20,
});// 将数据库连接池对象导出
module.exports = pool;

创建test.js文件,使用连接池查询数据库,代码如下:

const express = require("express"); // 导入express
const app = express(); // 创建实例
const pool = require("./mydb"); // 导入连接池
// http://localhost:3000/test
app.get("/test", ((req, res) => {// 从连接池中获取数据库的连接对象pool.getConnection(function (err, conn) {if (err) {console.log("数据库连接失败");} else {console.log("数据库连接成功");// 定义sql查询语句let sql = "select * from stu";// 查询操作conn.query(sql, function (err, result) {if (err) {console.log("数据库查询失败");} else {res.send(result);conn.release();}})}})
}))
// 监听3000端口
app.listen(3000);

启动服务器,在浏览器中打开http://localhost:3000/test,会看到成功查询到了表stu中的数据。

Node.js实现MySQL数据库连接池相关推荐

  1. node mysql 连接池创建_Node.js使用MySQL连接池的方法实例

    本文实例讲述了Node.js使用MysqL连接池的方法.分享给大家供大家参考,具体如下: Nodejs如何使用MysqL Nodejs要连接MysqL,可以使用Nodejs的MysqL驱动来实现.比如 ...

  2. MySQL会回收使用中的连接吗_Node.js实现mysql连接池使用事务自动回收连接的方法示例...

    本文实例讲述了Node.js实现mysql连接池使用事务自动回收连接的方法.分享给大家供大家参考,具体如下: var mysql = require('mysql'), Connection = re ...

  3. node.js连接MySQL操作及注意事项

    node.js作为服务端的js运行环境已经出现了有几年了,最近我有个朋友也在做这方面的开发,但是也是刚刚接触,遇到了很多坑.前几天他们在操作数据库的时候出现了点问题,后来我们一起看了看,其实都是nod ...

  4. Tomcat 5.5 配置 MySQL 数据库连接池

    用了最新的几个咚咚,搞了整整一天终于搞清楚了Tomcat 5.5 配置 MySQL 数据库连接池,网上的经验并不能完全用到新环境里面,我写出整个过程以方便大家配置. 1 环境描述 JDK 1.5 To ...

  5. python实现数据库连接池_Python实现Mysql数据库连接池

    Python实现Mysql数据库连接池 python连接Mysql数据库: python编程中可以使用MySQLdb进行数据库的连接及诸如查询/插入/更新等操作,但是每次连接mysql数据库请求时,都 ...

  6. tomcat7.0.42如何设置mysql数据库连接池

    转载自   tomcat7.0.42如何设置mysql数据库连接池 如何在tomcat7.0.42中设置mysql数据库连接池????eclipse如何绑定tomcat??按网上教程总不成功!怎么办 ...

  7. jboss mysql cluster_jboss配置mysql数据库连接池

    jboss配置mysql数据库连接池 下面YJBYS小编为大家整理了关于jboss配置mysql数据库连接池的文章,希望对你有所帮助.更多Java认证考试信息,尽在应届毕业生培训网! 1:配置: JD ...

  8. Node.js 连接 MySQL 并进行数据库操作 –node.js 开发指南

    Node.js是一套用来编写高性能网络服务器的JavaScript工具包 通常在NodeJS开发中我们经常涉及到操作数据库,尤其是 MySQL ,作为应用最为广泛的开源数据库则成为我们的首选,本篇就来 ...

  9. 跟李宁老师做项目:小程序版网上商城(Node.js + Express + MySQL)-李宁-专题视频课程...

    跟李宁老师做项目:小程序版网上商城(Node.js + Express + MySQL)-8799人已学习 课程介绍         本课程采用的技术包括小程序开发.Node.js.Express和M ...

最新文章

  1. Science 好文:强化学习之后,机器人学习瓶颈如何突破?
  2. [每日一题] 11gOCP 1z0-053 :2013-09-29 Flashback Data Archive ...................................6...
  3. rocketmq 消息指定_闲话RocketMQ
  4. 绘制多个折线图_学习笔记第一页 | 常用统计图绘制及描述规范
  5. 30_visdom可视化、TensorboardX及其案例、安装visdom、使用visdom的案例
  6. 【openjudge 1.11 07】和为给定数
  7. php 分布式数据库查询,分布式数据库 · Thinkphp5.0完全开发手册 · 看云
  8. RecycleView的Item Decoration间隔样式
  9. Tomcat与Apache集成
  10. 一文掌握 Linux 性能分析之 CPU 篇
  11. 最好用的三款epub阅读器
  12. MyBatis3 注解SQL 的使用方法
  13. 看完这篇你就懂了深度学习的具体流程和代码该怎么写了!(Deep Learning Onramp)
  14. 响应式2022英文企业官网源码,感觉挺有创意的
  15. UEFI——PCI/PCIe
  16. [机器学习与scikit-learn-33]:算法-回归-通过PolynomialFeatures实现数据的升维
  17. 最佳实践(2):iOS开发篇
  18. 质数的判断(Python)找到100(1000)以内的所有质数
  19. android 抠图功能,Android抠图工具,天天P图
  20. matlab 期权图,如何使用matlab计算期权价格

热门文章

  1. 揭秘智能投顾如何做到千人千面?
  2. appserv php 7,AppServ 8.0 的php 5.6 切换到 php7.0 方式
  3. 当用户将鼠标悬停在列表项上时,如何将光标变为手形?
  4. 严重:异常将上下文初始化事件发送到类的侦听器实例.[org.springframework.web.context.ContextLoaderListener] 以解决
  5. 微信小程序—获取用户头像、昵称
  6. 调试代码遗留_如何征服遗留代码
  7. 带你读论文系列之计算机视觉--SENet
  8. javascript DOM艺术
  9. 【工业大数据】大数据驱动的智能车间运行分析与决策方法体系
  10. 苹果录音怎么转换成mp3格式?