文章目录 一、准备工作二、连接数据库三、数据池保持连接 & 公共方法封装1.封装2.调用 四、拓展学习1.mysql 命令行(1)查看当前所有数据库:(2)使用指定数据库:(3)查看当前库
安装依赖包:
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 可以有效避免频繁连接、断开导致的资源消耗
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 }
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部分添加定时并回调连接
未完待续。。。欢迎留言一起学习探讨
拓展阅读:
show database;
use DBName;
show tables;
show tables from DBName;
create table tableName (colName dataType;colName dataType;...);
desc tableName;
# 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
在mysql文件夹找到 my.ini 文件
使用记事本打开:
Ctrl+F,搜索 datadir
:
如果上面的方式你掌握了,下面来一个终极大招:
show global variables like "%datadir%";
登入后,一行命令直接查出:
数据库整体搬迁直接迁移目录即可
[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
--结束END--
本文标题: 【实战】nodejs 必会技能 —— 封装 mysql 数据库连接
本文链接: https://www.lsjlt.com/news/391774.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-05-16
2024-05-16
2024-05-16
2024-05-15
2024-05-15
2024-05-15
2024-05-15
2024-05-15
2024-05-15
2024-05-15
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0