200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > serverlet 连接mysql_node node链接mysql mysql执行操作的封装类

serverlet 连接mysql_node node链接mysql mysql执行操作的封装类

时间:2019-09-10 18:57:12

相关推荐

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;

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。