zoukankan      html  css  js  c++  java
  • Node 操作MySql数据库

    1, 需要安装 MySQL 依赖 =>  npm i mysql -D

    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);
                }
            });
        });
    };
    复制代码

    3: 简单的使用 

    复制代码
    // 引入工具类
    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);
        });
    };
    
    // 调用方法
    ceshi();
    复制代码

    4: 带事务的使用

    复制代码
    // 引入工具类
    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();
                }
            });
        });
    };
    
    // 调用测试方法
    ceshi();

    注意:移动端前端开发调试 http://yujiangshui.com/multidevice-frontend-debug/

               文本大多为摘录或总结,如影响到原创利益问题,请联系我删除!

  • 相关阅读:
    提取PDF内容保存到Excel--Python3实现
    Python正则表达式常用语法
    我的数学建模之路
    Git基本用法
    PDF电子发票内容提取
    获取代理IP地址
    adb 命令 exec-out 直接截图保存到电脑出错的解决办法
    Python基础十一:使用模块
    MSTP生成树实验
    防火墙双机热备概念
  • 原文地址:https://www.cnblogs.com/Strong-stone/p/9340087.html
Copyright © 2011-2022 走看看