Node 操做MySql數據庫

1, 須要安裝 MySQL 依賴 =>  npm i mysql -Djavascript

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: 簡單的使用 java

複製代碼
// 引入工具類
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: 帶事務的使用mysql

複製代碼
// 引入工具類
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/es6

           文本大多爲摘錄或總結,如影響到原創利益問題,請聯繫我刪除!sql

相關文章
相關標籤/搜索