nodejs进阶(6)—连接MySQL数据库

news2024/11/25 22:42:33

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(); //释放一个连接放回连接池 需要再操作结束后再执行,否则后面的数据库操作会报错。

下面介绍一个复杂一点的增删查改的数据库操作,因相互之间有依赖,所以代码可读性就变得特别差。这样就引出了我们接下来要介绍饿流程控制的内容《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]);
                         }
                     });
                 });
             });
         });
     });
 })

运行结果

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/539027.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

IOS描述文件制作教程​

转载&#xff1a;IOS描述文件制作教程 iOS描述文件(.mobileprovision)一键申请 在主界面上点击描述文件按钮。 ​ 编辑切换为居中 添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09; 新建ios描述文件 然后点击新建&#xff0c;然后输入描述文件名称&…

chatgpt赋能Python-phython_抓取数据

Python 抓取数据的SEO 介绍 在今天的数字化时代&#xff0c;数据是企业的核心资产之一。然而&#xff0c;这些数据往往散布在网络上的不同源头。大多数的企业需要使用各种不同的技术来从各种不同的来源中抓取数据。Python 是一种强大的工具&#xff0c;可以使这个过程更加简单…

【Linux内核】自旋锁spinlock机制

自旋锁 Note: 在使用自旋锁时应该避免长时间持有锁&#xff0c;否则可能会导致其他线程或进程无法访问共享资源。因此&#xff0c;建议将锁的持有时间尽量缩短&#xff0c;以提高系统的并发性能。 Linux中的自旋锁机制是一种用于同步多个线程或进程访问共享资源的技术。当一个…

chatgpt赋能Python-nan在python

Nan在Python中的介绍 Nan是Python中的一个特殊值&#xff0c;它代表非数值&#xff08;Not a Number&#xff09;。在Python中&#xff0c;Nan常被用于表示缺失值或无意义的数值。 Nan的意义 Nan在Python中的意义与其他编程语言中的NaN类似。它表示一个数值是未定义或无法计…

使用viewport-fit=cover来解决关于ios在Safari浏览器内容被地址栏、菜单栏或工具栏遮挡导致的兼容问题

文章目录 前言一、viewport-fit1. 作用2. 取值3. 使用 二、使用css 的 env() 和 constant()函数用于设定安全区域与边界的距离1.iPhone手机的安全区域&#xff08;如下图&#xff09;2. 由来、作用3. 使用4.语法5.兼容问题 三、解决ios内容被Safari遮挡的两种情况1.顶层div的he…

chatgpt赋能Python-numpy转化为pandas

从Numpy到Pandas: 如何将数组转换为数据框 如果您正在使用Python进行数据分析&#xff0c;那么您一定会听说过Numpy和Pandas。他们是Python中最受欢迎的数据科学库之一&#xff0c;可以极大地简化数据处理的流程。但是&#xff0c;当您想从numpy数组转换为pandas数据框时&…

chatgpt赋能Python-pycharm的location

Pycharm Location: 如何更好地管理Python项目文件 在日常Python开发中&#xff0c;我们很少能避免需要同时管理多个项目&#xff0c;这就要求我们有一款优秀的IDE来帮助我们更好地进行项目管理。Pycharm 是一款备受欢迎的 Python IDE。其中的 Location 功能可以帮助我们更好地…

Java 基础进阶篇(十五):IO 流总结(全网最全面)

文章目录 前置内容&#xff1a;字符集一、IO 流概述二、字节流2.1 文件字节输入流 FileInputStream2.1.1 案例&#xff1a;每次读取一个字节2.1.2 案例&#xff1a;每次读取一个字节数组2.1.3 案例&#xff1a;读取文件的全部字节 2.2 文件字节输出流 FileOutputStream2.3 文件…

AI绘画:Midjourney 注册

AI绘画:Midjourney 注册 前提:需要魔法才能使用 第一步:下载Discord 官方网站:https://discord.com/,打开网址,下载您需要的版本。 注意:支持手机端(Android&ios),Windows,Linux,Mac 下面以Windows注册为例<

纵使AI再强悍,低代码风韵犹存

互联网沉默已久&#xff0c;ChatGPT的出现激起千层浪&#xff0c;沉寂已久的互联网迎来新一轮的机遇。毫不夸张地说&#xff0c;任何一家以技术见长的企业&#xff0c;人工智能绝对占有一席之地。 目录 人工智能很强悍 低代码风韵犹存 快速开发平台&#xff0c;大有看头 AI…

网络安全等级保护等级保护对象的安全保护等级

什么是等保&#xff1f; 2017年6月1号&#xff0c;《中华人民共和国网络安全法》出台&#xff0c;国家实行等级安全保护制度。网络安全等级保护以《中华人民共和国网络安全法》为法律依据&#xff0c;以2019年5月发布的《GB/T22239-2019 信息安全技术 网络安全等级保护基本要求…

网络安全难学吗?前途怎么样?

网络安全是一门技术性很强的学科&#xff0c;需要掌握扎实的计算机技术基础和相关的安全技能&#xff0c;因此对于初学者来说可能会比较困难。但是&#xff0c;网络安全是一个非常重要的领域&#xff0c;在如今数字化的时代&#xff0c;各种网络犯罪、信息泄露等安全问题屡见不…

javassist动态生成,修改字节码 demo

Javassist 是一个开源的分析、编辑和创建 Java 字节码的类库&#xff0c;被广泛用于程序性的类文件操作和运行时 AOP 框架&#xff0c;能动态改变类的结构&#xff0c;或者动态生成类。 关于javassist和反射 Javassist 不是通过反射来实现的&#xff0c;而是通过直接操作字节…

python3+telnetlib实现简单自动测试

1 telnetlib介绍 1.1 简介 官方介绍文档&#xff1a;telnetlib – Telnet 客户端 — Python 3.9.6 文档 telnetlib 模块提供一个实现Telnet协议的类 Telnet。 1.2 库常用函数及使用 1.2.1 建立连接 建立连接有两种方式&#xff1a;1、实例化函数的时候&#xff0c;将可选参数…

PSP - AlphaFold2 Multimer 的 Heteromer (异源多聚体) MSA 逻辑

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://blog.csdn.net/caroline_wendy/article/details/130733737 同源多聚体 (Homomer) 是由相同的蛋白质亚基组成的,而异源多聚体 (Heteromer) 是由不同的蛋白质亚基组成的。同源多聚体的亚基之间通常有对称的相…

网络安全真的有那么好吗

网络安全是一个永远不会完美的领域&#xff0c;因为网络空间是一个开放、动态、复杂的环境&#xff0c;存在着许多安全威胁和攻击手段。虽然现代的安全技术和防御措施已经很强大&#xff0c;但黑客和病毒等攻击手段也在不断升级&#xff0c;不断打破现有的安全防御措施。因此&a…

论-如何更好的帮助小伙伴们写出更多高质量的论文

开篇一张图&#xff0c;告诉大家&#xff0c;哥哥我身体依然倍棒&#xff0c;依然奋战在一线。 前言 最近几个月一直在加班为小伙伴们创造价值&#xff0c;已经帮助上百位小伙伴解决了论文的“烦恼”与“忧愁”&#xff0c;但是我想说的是&#xff0c;哥哥真的苦啊&#xff0c;…

【分布族谱】泊松分布和二项分布、正态分布的关系

文章目录 泊松分布和二项分布的关系和正态分布的关系 泊松分布 如果在有限时间 ( 0 , 1 ) (0,1) (0,1)内进行 n n n次伯努利实验&#xff0c;那么每次伯努利实验所占用的时间为 1 n \frac{1}{n} n1​&#xff0c;按照自然规律&#xff0c;一件事情肯定是时间越长越容易发生&am…

chatgpt赋能Python-pycharm改名字

PyCharm更名为JetBrains PyCharm——专属Python开发者的最佳IDE JetBrains PyCharm是一款Python开发者最喜欢使用的IDE之一。然而&#xff0c;在2021年初&#xff0c;这款世界著名的Python IDE进行了一次重大更名——PyCharm更名为JetBrains PyCharm。在这篇文章中&#xff0c…

Rust每日一练(Leetday0003) 整数反转、字串转整数、回文数

目录 7. 整数反转 Reverse Integer &#x1f31f;&#x1f31f; 8. 字符串转换整数 String-to-integer (atoi) &#x1f31f;&#x1f31f; 9. 回文数 Palindrome Number &#x1f31f; &#x1f31f; 每日一练刷题专栏 &#x1f31f; Rust每日一练 专栏 Golang每日一…