serverlet 连接mysql_node node链接mysql mysql执行操作的封装类
一、node操作mysql数据库
1) 安装mysql 模块
npm i mysql
node操作数据库需要四个步骤:
// 1 配置连接参数,创建连接
let connection = mysql.createConnection({
host:"localhost",
user:"root",
password:"",
database:"ujiuye"
})
// 2 调用 connect() 尝试连接数据库
connection.connect((err)=>{
if(err){
console.log( "连接失败:"+ err.stack );
return;
}
console.log("连接成功"+ connection.threadId );
})
// 3 执行CRUD 操作
// 查询操作
connection.query("select * from 班级",[],(err,results,fields)=>{
// console.log( results);
for(let item of results){
console.log(`班号:${item.班号},班主任:${item.班主任},班长:${item.班长}`);
}
})
// 4 关闭数据库连接,释放资源
connection.end();
2)注意, select 操作,成功后返回一个查询结果组成的json。
connection.query("select * from 班级",[],(err,results,fields)=>{
// console.log( results);
for(let item of results){
console.log(`班号:${item.班号},班主任:${item.班主任},班长:${item.班长}`);
}
})
3) 插入,修改、删除等操作结果 会返回一个对象:
OkPacket {
fieldCount: 0,
affectedRows: 1,
insertId: 18,
serverStatus: 2,
warningCount: 0,
message: '',
protocol41: true,
changedRows: 0
}
注意,如果参数错误,sql语句可能会成功执行,不会报错,但实际没有实现用户想要的删除效果。因此最好判断 对象中的affectedRows 如果大于0,才能确定确实执行了删除操作。
二、mysql执行数据操作的封装类db.js
1) 封装类的骨架
let mysql = require("mysql");
class Db{
constructor(){
}
// 返回一个链接对象,以备query()使用
initConn(){
}
// 执行数据库的CRUD操作
query(){
}
// 关闭连接,释放资源
close(){
}
}
let db = new Db();
module.exports = db;
2) 将外部配置属性作为模块导入
let mysql = require("mysql");
let dbconfig = require("./dbconfig");
class Db{
constructor({host="localhost",user="root",password="",prot=3306,database=""}){
this.options={
host,
user,
password,
database
}
}
// 返回一个链接对象,以备query()使用
initConn(){
}
// 执行数据库的CRUD操作
query(){
}
// 关闭连接,释放资源
close(){
}
}
let db = new Db(dbconfig);
module.exports = db;
3) 实现query( )方法,因为外部使用时想使用async...await ,因此 query()需要返回一个promise对象
let mysql = require("mysql");
let dbconfig = require("./dbconfig");
class Db{
constructor({host="localhost",user="root",password="",prot=3306,database=""}){
this.options={
host,
user,
password,
database
}
}
// 返回一个链接对象,以备query()使用
initConn(){
}
// 执行数据库的CRUD操作
query(){
this.connection = await this.initConn();
return new Promise((resolve,reject)=>{
this.connection.query(sql,arr,(err,result)=>{
if(!err){
resolve( result)
}else{
reject(err);
}
})
})
}
// 关闭连接,释放资源
close(){
}
}
let db = new Db(dbconfig);
module.exports = db;
4) query方法需要 connection对象, 而 connect() 又是一个异步,因此再次封装到promise中
let mysql = require("mysql");
let dbconfig = require("./dbconfig");
class Db{
constructor({host="localhost",user="root",password="",prot=3306,database=""}){
this.options={
host,
user,
password,
database
}
}
// 返回一个链接对象,以备query()使用
initConn(){
let conn = mysql.createConnection( this.options );
return new Promise((resolve,reject)=>{
conn.connect((err)=>{
if(!err){
resolve( conn )
}else{
reject(err)
}
})
})
}
// 执行数据库的CRUD操作
query(){
this.connection = await this.initConn();
return new Promise((resolve,reject)=>{
this.connection.query(sql,arr,(err,result)=>{
if(!err){
resolve( result)
}else{
reject(err);
}
})
})
}
// 关闭连接,释放资源
close(){
}
}
let db = new Db(dbconfig);
module.exports = db;
5) 实现close()方法。最终的代码:
let mysql = require("mysql");
let dbconfig = require("./dbconfig");
class Db{
constructor({host="localhost",user="root",password="",prot=3306,database=""}){
this.options={
host,
user,
password,
database
};
this.connection = null;
}
// 返回一个链接对象,以备query()使用
initConn(){
let conn = mysql.createConnection( this.options );
return new Promise((resolve,reject)=>{
conn.connect((err)=>{
if(!err){
resolve( conn )
}else{
reject(err)
}
})
})
}
// 执行数据库的CRUD操作
async query(sql,arr=[]){
this.connection = await this.initConn();
return new Promise((resolve,reject)=>{
this.connection.query(sql,arr,(err,result)=>{
if(!err){
resolve( result)
}else{
reject(err);
}
})
})
}
// 关闭连接,释放资源
close(){
this.connection.end();
}
}
let db = new Db(dbconfig);
module.exports = db;
serverlet 连接mysql_node node链接mysql mysql执行操作的封装类相关推荐
- hive 把mysql语句执行_R分别连接mysql hive执行操作
大半年忘记更新工作记录了,惭愧,慢慢补上. mysql/hive 是两类常用的不同类型的数据库,在数据操作上存在一定的区别. 1-MYSQL的连接. library(DBI) library(RMy ...
- lua mysql 事务_Lua 操作数据库(MySQL)
Lua 操作数据库(MySQL) 对于简单的数据操作,我们可以使用文件,但是,有时这些文件操作可能效率不高.可扩展性和功能不够强大.为此,我们通常会切换到数据库.LuaSQL提供从Lua到数据库管理系 ...
- ubyntu 链接mysql_ubuntu mysql远程连接
ubuntu mysql远程连接 http://blog.csdn.net/helen_shw/archive/2010/01/22/5224524.aspxkiki@kiki-desktop:/et ...
- LAMP/LNMP环境下:phpinfo php连接mysql php执行mysql查询 测试代码及响应
1.测试php环境搭建完成: <?phpphpinfo();?> =========================== 2.测试php连接mysql数据成功: <?php$mysq ...
- DBeaver连接mysql数据库执行.sql脚本,Windows
DBeaver连接mysql数据库执行.sql脚本,Windows操作系统 (1)首先需要DBeaver连接mysql成功. 启动mysql, mysqld --console 打开DBeaver连接 ...
- node 链接MySql数据库并 进行增删改查
在Navicat中创建数据库创建表 那么就开始吧! 一.链接数据库 mysql - npmA node.js driver for mysql. It is written in JavaScript ...
- ubyntu 链接mysql_ubuntu mysql 的安装、配置、简单使用,navicat 连接
MySQL 的安装 1. 先更新 apt 安装中心: apt update 里面会有默认最新的mysql 的包. 2.安装msyql : sudo apt-get install mysql-serv ...
- mysql 中的左连接,右链接和内连接
左连接,右链接和内连接 在自己做项目的过程中,遇到了相关的数据库的查询的问题,在这里做一下简短的记录和总结 其中左连接和右链接属于外连接: 左连接: left (outer) join 右链接: ri ...
- mysql远程连接10061_navicat 远程链接数据库报错10061,1130解决
在windows上安装了navicat后想要链接到ubuntu的数据库,结果一直报错10061. 解决办法如下: 1.首先确保关闭防火墙. 2.然后在ubuntu中找到mysql的配置文件,在这里 / ...
最新文章
- MFC List Control 控件添加单元格编辑,实现可编辑重写
- JAVA——System.in作为控制台输入时结束输入(输入EOF)解决方案
- MarkdownPad 汉化破解(含下载地址)
- Bzoj 2127 happiness 最小割
- 每天进步一点点017
- 关于Arduino 步进电机Stepper库的一些想法
- Tapioca:linux上同gtalk语音通信
- 2018年php框架,2018年的7个热门网站开发框架
- Cameralink多功能接口转换模块
- 阿里发布的Redis开发文档,涵盖了所有的redis操作
- MIS系统(1)- MIS系统的介绍
- 实验二 概念模型ER图
- 命名空间又称名字空间,英文名:Namespace
- 一种有手就行的物联网平台的多终端接入方法
- 汽车结构嵌件市场现状及未来发展趋势
- ZL50轮胎式装载机液压系统设计(设计说明书+CAD图纸+开题报告+外文翻译)
- Matlab绘制95%置信区间图
- 分析URL中关键字(从阿江统计偷的)
- Protobuf序列化原理
- IDEA 全局替换 增加前缀 后缀