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/

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

  • 相关阅读:
    真正的e时代
    在线手册
    UVA 10616 Divisible Group Sums
    UVA 10721 Bar Codes
    UVA 10205 Stack 'em Up
    UVA 10247 Complete Tree Labeling
    UVA 10081 Tight Words
    UVA 11125 Arrange Some Marbles
    UVA 10128 Queue
    UVA 10912 Simple Minded Hashing
  • 原文地址:https://www.cnblogs.com/Strong-stone/p/9340087.html
Copyright © 2011-2022 走看看