Node 操作 MySQL 数据库
1, 下载 mysql 依赖 => npm -i mysql
2, 写一个核心工具类, 用于获取线程池连接 mysql-util.js
// 引入 mysql 数据库连接依赖
const mysql = require("mysql"); // 创建 mysql 连接池并配置参数
const pool = mysql.createPool({
host: "192.168.200.100", // 主机地址
port: 3306, // 端口
user: "root", // 数据库访问账号
password: "920619", // 数据库访问密码
database: "test", // 要访问的数据库
charset: "UTF8_GENERAL_CI", // 字符编码 ( 必须大写 )
typeCast: true, // 是否把结果值转换为原生的 javascript 类型
supportBigNumbers: true, // 处理大数字 (bigint, decimal), 需要开启 ( 结合 bigNumberStrings 使用 )
bigNumberStrings: true, // 大数字 (bigint, decimal) 值转换为javascript字符对象串
multipleStatements: false, // 允许每个mysql语句有多条查询, 未防止sql注入不开启
//connectTimeout: 5000, // 数据库连接超时时间, 默认无超时
});
pool.connectionLimit = 10; // 连接池中可以存放的最大连接数量
pool.waitForConnections = true; // 连接使用量超负荷是否等待, false 会报错
pool.queueLimit = 0; // 每个连接可操作的 列数 上限, 0 为没有上限 // 对外暴漏从连接池中获取数据库连接的方法
module.exports = function () {
return new Promise((resolve, reject) => {
pool.getConnection((err, conn) => {
if (err) {
console.log("数据库连接获取失败");
} else {
resolve(conn);
}
});
});
};
2, 执行简单的操作测试
// 引入工具类
let mysqlUtil = require("./mysql-util"); // 声明一个同步方法, 这里要求有 SQL 语句的基础
let ceshi = async function () {
// 获取连接, es6 新特性 awit 不能少
let conn = await mysqlUtil();
// 准备一个防 SQL 注入的 SQL 语句, 并准备参数
let sqlStr = "INSERT INTO user (UserName, UserSex) value (?, ?)";
let sqlParam = ["姓名", 1];
// 执行 SQL 语句并返回结果
conn.query(sqlStr, sqlParam, function (err, ret) {
console.log(ret);
conn.release();
});
}; // 调用方法
ceshi();
3, 执行带事务的操作测试
// 引入工具类
let mysqlUtil = require("./mysql-util"); // 声明一个同步方法, 这里要求有 SQL 语句的基础
// 在 beginTransaction 和 commit 之间可以执行多次 query 方法
let ceshi = async function () {
// 获取连接
let conn = await mysqlUtil();
// 开启事物
await new Promise((resolve, reject) => {
conn.beginTransaction(err => {
if (err) {
reject(err);
} else {
resolve();
}
});
});
// 执行第一个 SQL 语句
let result1 = await new Promise((resolve, reject) => {
let sqlStr = "INSERT INTO user (UserName, UserSex) values (?, ?)";
let sqlParam = ["姓名2", 0];
conn.query(sqlStr, sqlParam, function (err, ret) {
if (err) {
// 回滚之前的数据库操作, 直至碰到 beginTransaction
return conn.rollback(() => {
resolve(err);
});
}
resolve(ret);
});
});
console.log(result1);
// 执行第二个 SQL 语句
let result2 = await new Promise((resolve, reject) => {
let sqlStr = "SELECT * FROM user";
//let sqlStr = "SELEC * FROM user"; // 错误的 SQL 语句
conn.query(sqlStr, function (err, ret) {
if (err) {
// 回滚之前的数据库操作, 直至碰到 beginTransaction
return conn.rollback(() => {
resolve(err);
});
}
resolve(ret);
});
});
console.log(result2);
// 关闭事务
await new Promise((resolve, reject) => {
conn.commit(err => {
if (err) {
reject(err);
} else {
resolve();
}
});
});
conn.release();
}; // 调用测试方法
ceshi();
Node 操作 MySQL 数据库的更多相关文章
- 你不会用node 操作mysql数据库吗?
http://static.runoob.com/download/websites.sql这是实例 websites.sql文件1.安装node的mysql服务 npm install mysql ...
- Node 操作MySql数据库
1, 需要安装 MySQL 依赖 => npm i mysql -D 2, 封装一个工具类 mysql-util.js // 引入 mysql 数据库连接依赖 const mysql = re ...
- node操作mysql数据库
1.建立数据库连接:createConnection(Object)方法 该方法接受一个对象作为参数,该对象有四个常用的属性host,user,password,database.与php ...
- 使用node js 操作 Mysql 数据库
使用node js 操作 Mysql 数据库 http://www.nodejs.org/ //node js 数据库操作 MySQL //使用https://github.com/felixge/n ...
- node使用MySQL数据库
内容: 1.node连接数据库 2.数据库常用操作 3.数据库实例 - 用户注册.登陆 1.node连接数据库 (1)下载mysql模块 (2)使用mysql模块连接数据库 let db=mysql. ...
- PHP操作MySQL数据库5个步骤
PHP操作MySQL数据库一般可分为5个步骤:1.连接MySQL数据库服务器:2.选择数据库:3.执行SQL语句:4.关闭结果集:5断开与MySQL数据库服务器连接. 1.用mysql_connect ...
- python操作mysql数据库的相关操作实例
python操作mysql数据库的相关操作实例 # -*- coding: utf-8 -*- #python operate mysql database import MySQLdb #数据库名称 ...
- 转 用C API 操作MySQL数据库
用C API 操作MySQL数据库 参考MYSQL的帮助文档整理 这里归纳了C API可使用的函数,并在下一节详细介绍了它们.请参见25.2.3节,“C API函数描述”. 函数 描述 mysql_a ...
- PHP操作mysql数据库:[2]查询数据听语音
本文主要详细讲解如何使用php语言,对mysql数据库进行查询.添加.删除.更新等操作. 工具/原料 Macromedia Dreamweaver 8 mysql数据库,php语言 一.前言 ...
随机推荐
- elasticsearch 口水篇(4)java客户端 - 原生esClient
上一篇(elasticsearch 口水篇(3)java客户端 - Jest)Jest是第三方客户端,基于REST Api进行调用(httpClient),本篇简单介绍下elasticsearch原生 ...
- Android adb logcat输出日志显示不全解决方案
在终端中使用adb logcat打印服务器json数据,如果返回数据过大超过4000字节(4K)即会截断不显示 原因:logcat在对于message的内存分配大概是4k左右.所以超过的内容都直接被丢 ...
- Java学习——上转型与下转型对象
上转型:重写父类方法才调用子类方法,其他仍用父类的,包括被子类隐藏的父类成员变量,而且不能调用子类新增的成员变量和成员方法. 下转型:只能是转上去的才能转下去.下转型类似于该子类直接继承父类. pac ...
- 【ZZ】C++11之统一初始化语法 | 桃子的博客志
C++11之统一初始化语法 | 桃子的博客志 https://taozj.net/201710/list-initialize.html 在当前新标准C++11的语法看来,变量合法的初始化器有如下形式 ...
- Jmeter(十三)Debug Sampler
上篇记录了关联的一些内容.当然,关联是有“风险”的,经常写的正则表达式,jsonpath,xpath自己认为是没问题的,可是就是跑起来有问题,百思不得其解,究竟是数据问题还是表达式的问题,本篇就来记录 ...
- [UE4]蓝图比C++慢10倍,是吗?
首先,蓝图肯定是比C++慢. 任何脚本语言(需要解释执行的语言),和C++相比可能达到十倍甚至百倍的差距.比如Java.Python.Lua,JS. 脚本语言是运行在虚拟机上的,所以它们比起直接运行的 ...
- MySQL 8.0的关系数据库新特性详解
前言 MySQL 8.0 当前的最新版本是 8.0.4 rc,估计正式版本出来也快了.本文介绍几个 8.0 在关系数据库方面的主要新特性. 你可能已经知道 MySQL 从版本 5.7 开始提供了 No ...
- tf.nn.nce_loss
def nce_loss(weights,biases,inputs,labels,num_sampled,num_classes,num_true=1,sampled_values=None,rem ...
- visual studio 版本管理从tfs迁移到svn
1.首先要解除解决方案的tfs绑定 清除(删除)项目下的所有版本控制文件,这些文件有:*.vssscc,*.vspscc 删除这些版本控制文件比较简单,搜索这些后缀的文件,删除即可. 修改项目的解决方 ...
- Windows使用Idea编译spark源码
1. 环境准备 JDK1.8 Scala2.11.8 Maven 3.3+ IDEA with scala plugin 2. 下载spark源码 下载地址 https://archive.apach ...