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;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值