文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

【实战】nodejs 必会技能 —— 封装 mysql 数据库连接

2023-09-03 06:54

关注

文章目录


  • [mysql - mysql中文文档翻译 - Breword 文档集合]:(https://www.breword.com/mysqljs-mysql)

安装依赖包:

npm i mysql -s
  • [mysql - npm]:(https://www.npmjs.com/package/mysql)
const mysql = require("mysql");const db_config={    host:"localhost",    user:"root",    password:"root",    port:"3306",    database:"mydb" }let conn = mysql.createConnection(db_config);// 连接数据库conn.connect(err => {    if(err) {        throw err    } else{        console.log("连接成功!");    }})// 查询数据库conn.query("select * from user", (err, res) => {    if(err){        throw err    }else{        console.log(res);        closeMysql(conn);    }});// 关闭数据库let closeMysql = conn => {    conn.end(err => {        if(err){        throw err        }else{            console.log('关闭成功!');        }});}

运行中若遇到如下报错,请检查输入信息是否正确(host、port、user、password 等),jdbc配置中拿到的相关信息尤其是密码很可能是加密后的

Error: ER_ACCESS_DENIED_ERROR: Access denied for user ‘root‘@‘localhost‘ (using password: YES)

node - MySQL 数据库连接配置项:

  • host:主机地址 (默认:localhost)
  • user:用户名
  • password:密码
  • port:端口号 (默认:3306)
  • database:数据库名
  • charset:连接字符集(默认:‘UTF8_GENERAL_CI’,注意字符集的字母都要大写)
  • localAddress:此IP用于TCP连接(可选)
  • socketPath:连接到unix域路径,当使用 host 和port 时会被忽略
  • timezone:时区(默认:‘local’)
  • connectTimeout:连接超时(默认:不限制;单位:毫秒)
  • stringifyObjects:是否序列化对象(默认:‘false’ ;与安全相关)
  • typeCast:是否将列值转化为本地JavaScript类型值 (默认:true)
  • queryFormat:自定义query语句格式化方法
  • supportBigNumbers:数据库支持bigint或decimal类型列时,需要设此option为true (默认:false)
  • bigNumberStrings:supportBigNumbers和bigNumberStrings启用 强制bigint或decimal列以JavaScript字符串类型返回(默认:false)
  • dateStrings:强制timestamp,datetime,data类型以字符串类型返回,而不是JavaScriptDate类型(默认:false)
  • debug:开启调试(默认:false)
  • multipleStatements:是否许一个query中有多个MySQL语句 (默认:false)
  • flags:用于修改连接标志
  • ssl:使用ssl参数(与 crypto.createCredenitals 参数格式一至)或一个包含ssl配置文件名称的字符串,目前只捆绑 Amazon RDS 的配置文件

欢迎关注【程序边界】

数据库连接池 pool 可以有效避免频繁连接、断开导致的资源消耗

1.封装

const mysql = require('mysql')const db_config = {host:"localhost",user:"root",password:"root",port:"3306",database:"mydb" }let sqlConnTemp = (sql, params) => {  return new Promise((resolve, reject) => {    let conn = mysql.createConnection(db_config)    let closeMysql = conn => conn.end(err => if(err) throw err )    conn.connect((err, conn) => {      err ? reject(err) : conn.query(sql, params, (err, data, fields) => {        err ? reject(err) : resolve(data)      })      closeMysql(conn);    })  })}let sqlConn = (sql, params) => {  return new Promise((resolve, reject) => {  // 连接池(保持连接)    const pool = mysql.createPool(db_config)    pool.getConnection((err, conn)=>{        err ? reject(err) : conn.query(sql, params, (err, data, fields) => {        err ? reject(err) : resolve(data)      })      conn.release() // 仅释放未关闭      // pool.end() // 关闭连接    })  })}module.exports = { sqlConn,sqlConnTemp }

2.调用

const { sqlConn }= require('./mysql')sqlConn('select * from user_table where age = ? and sex = ?',[21, 1]).then((data) => {    console.log(data)    res.send(data)}).catch((err) => {    console.error(err)    res.send(err)})

若是担心网络问题造成连接失败,可以在连接reject部分添加定时并回调连接


未完待续。。。欢迎留言一起学习探讨


拓展阅读:

  • [数据库连接池、sequelize实现增删改查等操作]:(https://blog.csdn.net/TangJing_/article/details/121602581)

1.mysql 命令行

(1)查看当前所有数据库:

show database;

(2)使用指定数据库:

use DBName;

(3)查看当前库的所有表:

show tables;

(4)查看其它库的所有表:

show tables from DBName;

(5)创建表:

create table tableName (colName dataType;colName dataType;...);

(6)查看表结构

desc tableName;

(7)查看当前版本

# mysql  Ver 8.0.32 for Win64 on x86_64 (MySQL Community Server - GPL)mysql -V# 用账号 ODBC,连接上MySQL服务器,默认连接到localhost上的3306端口。mysql -v# 仅限 windows 系统(`|`管道符;find命令查找字符串;注意引号)mysql --help | find "Ver"# 仅限 linux系统(`|`管道符;grep命令查找字符串)mysql --help | grep Ver

权限有问题会报错:

  • ERROR 1045 (28000): Access denied for user 'ODBC'@'localhost' (using password: NO)
select version();

在这里插入图片描述
或:

status;

在这里插入图片描述
或:

\s

在这里插入图片描述

2.语法规范

3.mysql 其他

(1)查看自己数据库文件所在的位置

show global variables like "%datadir%";

登入后,一行命令直接查出:

在这里插入图片描述
数据库整体搬迁直接迁移目录即可

my.ini

[mysqld]# 设置3306端口port=3306# 设置mysql的安装目录basedir=D:\\Program Files\mysql-8.0.19-winx64# 设置mysql数据库的数据的存放目录datadir=D:\\Program Files\mysql-8.0.19-winx64\Data# 允许最大连接数max_connections=200# 允许连接失败的次数(防止有人攻击数据库系统)max_connect_errors=10# 服务端使用的字符集默认为UTF8character-set-server=utf8# 创建新表时将使用的默认存储引擎default-storage-engine=INNODB# 默认使用“mysql_native_password”插件认证default_authentication_plugin=mysql_native_passwordsql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION[mysql]# 设置mysql客户端默认字符集default-character-set=utf8[client]# 设置mysql客户端连接服务端时默认使用的端口port=3306default-character-set=utf8

转载请留言

来源地址:https://blog.csdn.net/qq_32682301/article/details/128826764

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯