node.js中的mysql高端玩法二之连接池连接数据库

后面有具体的连接池mysql数据库的增删改查规范
以及回调函数式封装mysq和Promise封装mysql
连接池封装和使用非常重要,我会花很长的一段代码和文章进行详细个人理解的讲解.
请小伙伴耐心观看,祝看官获益匪浅.

先上实战手敲敲案例

var express=require("express")
var router=express.Router()
var mysql = require('mysql');
// 配置数据库之
   //创建连接池
   var pool  = mysql.createPool({
    // host填写的是连接数据库的时候的ip
    host     : 'localhost',
    // user填写的是连接数据库的时候的用户名
    user     : 'root',
    // password填写的是连接数据库的时候的密码
    password : 'root',
    // port填写的是连接数据库的时候的端口号
    port: 3306,
    // database填写的是连接数据库之后进去新建数据库的数据库名字
    database: 'jiaoxue',
    // multipleStatements表示是否允许同时创建多个连接池
    // 如果multipleStatements为true,并且不设置connectionLimit参数,则默认同时创建十个连接池
    multipleStatements: true,
    // connectionLimit表示你想同时创建多少个连接池如下我们写了20个
    connectionLimit:20,
    // 同时创建多个连接池,并不是创建越多越好的,多了会消耗性能,别人用完了连接池,连接池池立马回收.
});
// 注意连接池方式和对象连接方式不同的地方在于可以直接使用连接不需要先连接,也不需要断开连接
router.get("/cb",(req,res)=>{
// 查询数据库
// from后面填写的是你在数据库内部建立的表名
var sql=`select * from student`
pool.query(sql, function (error, results, fields) {
    console.log("错误发源地?");
    if (error) throw error;
    console.log('results', results);
    // 读取数据库,获取所有用户.
    res.send(results)
});
})

router.delete("/sc/:id",(req,res)=>{
    var {id}=req.params     
// 查询数据库
console.log(typeof id);
var sql=`delete from student where id="${id}"`
pool.query(sql, function (error, results, fields) {
    console.log("错误发源地?");
    if (error) throw error;
    console.log('results', results);
    // 读取数据库,获取所有用户.
    res.send("连接池删除方法,删除成功!")
});

})
module.exports=router

mysql的两种封装

// 封装mysql数据库操作的方式
var mysql = require("mysql");
const { resolveContent } = require("nodemailer/lib/shared");
// 配置数据库之
//创建连接池
var pool = mysql.createPool({
    // host填写的是连接数据库的时候的ip
    host: 'localhost',
    // user填写的是连接数据库的时候的用户名
    user: 'root',
    // password填写的是连接数据库的时候的密码
    password: 'root',
    // port填写的是连接数据库的时候的端口号
    port: 3306,
    // database填写的是连接数据库之后进去新建数据库的数据库名字
    database: 'jiaoxue',
    // multipleStatements表示是否允许同时创建多个连接池
    // 如果multipleStatements为true,并且不设置connectionLimit参数,则默认同时创建十个连接池
    multipleStatements: true,
    // connectionLimit表示你想同时创建多少个连接池如下我们写了20个
    connectionLimit: 20,
    // 同时创建多个连接池,并不是创建越多越好的,多了会消耗性能,别人用完了连接池,连接池池立马回收.
});
// 注意连接池方式和对象连接方式不同的地方在于可以直接使用连接不需要先连接,也不需要断开连接

// 回调函数之初级封装mysql之回调写法
// function sjk(sql,callback) {
//     // 这是回调函数的封装算是一种比较传统的封装
//     pool.query(sql, function (error, results, fields) {
//         console.log("错误发源地?");
//         if (error) throw error;
//         callback(results)
//     });
// }
// 我们使用sjk回调函数的时候要这么用
// sjk(sql,function(data){
//     res.send(data)
// })
// 在回调函数里面用res.send 返回结果.



//mysql的高级封装之Promise封装
function sjk(sql) {
return new Promise((resolve,reject)=>{
    pool.query(sql, function (error, results, fields) {
        if (error) {
            throw error;
            reject(error)
        }else{
            resolve(results)
        }
    });
}) 
}

// 使用如何使用呢?

// 方法一:如下

// sjk(sql).then((data)=>{
//     res.send(data)
// })

// 方法二:如下

// var jieguo=await sjk(sql)
// res.send(jieguo) 
// 注意await方法需要放在async函数的内部
// (async(){
// try{
//     var jieguo=await sjk(sql)
// res.send(jieguo) 
// }catch(err){
//     res.send("删除失败")
// }
// })()

// try catch方法的介绍
// 如果try代码块代码不报错就只执行try代码块不会执行cath带码块,如果try代码块报错,那么就直接执行catch代码块
// try{
//     console.log(a);
//     console.log(1);
// }catch(err){
//     console.log(2);
// }
module.exports = sjk

使用时的js文件如下👇

var express=require("express")
var router=express.Router()
var sjk=require("./mysql连接池封装")

// 查询表
router.get("/sjk/cx",async(req,res)=>{
    var {name}=req.query
    var sql=`select * from student`
    try{
        var jieguo=await sjk(sql)
    res.send(jieguo) 
    }catch(err){
        res.send("删除失败")
    }
})

// router.get("sjk/s",async(req,res)=>{
    
// })
// 插入数据
router.get("/sjk/add",async(req,res)=>{
    var{name,sex,love,id,age}=req.query
    console.log(name,sex,love,id,age);
    var sql=`insert into student (name,sex,love,id,age) values ("${name}",'${sex}',"${love}",'${id}',"${age}")`;
    try{
        var jieguo=await sjk(sql)
    res.send("插入数据成功!")
    }catch(err){
        res.send("插入数据失败!")
    }
})
// 删除sd刪掉的意思
router.get("/sjk/sd",async(req,res)=>{
var {age,sex}=req.query
var sql=`delete from student where age>=${age} and sex="${sex}"`
try{
    var jieguo=await sjk(sql)
res.send("删除数据成功!") 
}catch(err){
    res.send("删除数据失败!")
}
})

// 改
router.get("/sjk/gx",async(req,res)=>{
    var {age,sex,sex1}=req.query
    console.log(age,sex);
    var sql=`update student set sex="${age}" where sex='${sex}'`;
    try{
        var jieguo=await sjk(sql)
    res.send("数据修改成功!") 
    }catch(err){
        res.send("数据修改失败!")
    }
})
module.exports=router

mysql增删改查规范之重中之重语法一定要牢记

// node.js当中的mysql增删改查语法
// 查
// sql=SELECT 字段的属性名用逗号隔开 FROM 数据库的表名
// 例子1→var sql='SELECT love FROM student'
// 其中例子2当中的love到id是字段的部分属性名
// 例子2→var sql='SELECT love,name,sex,id FROM student'
// 如果查询整个表的内容的时候我们可以简写如下↓例子3
// 例子3→var sql=`select * from student`

// const { connect } = require("./goods");

// 用连接池的增加插入数据
// 例子如下注意values后面括号内部的如果是用模板字符串做变量的时候,我们需要给每一个变量加上引号
// var sql=`insert into student (name,sex,love,id) values ("${name}",'${sex}',"${love}",'${id}')`;
// 注意values右边括号内部的每一个值要加引号

// 删除
// 例子如下↓
// var sql=`delete from student where age>=${age} and sex="${sex}"`
// 删除的是如果想用多个条件需要注意要用and去连接
// 如果只是单一的用一个条件去删除某个东西的话我们可以如下的写法
// --删除MyGuests表中id为1的数据
// var sql=DELETE FROM MyGuests where id=1;

// 改写数据
// 例子如下↓
// var sql=`update student set sex="${age}" where sex='${sex}'`;
// where是你选择的数据,【就是你想选哪条数据比如选id为某某某,sex为男】
// set后面的是你要改的数据,你要把选好的那条数据的某个属性改成什么
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值