• Node.js入门教程 第六篇 (连接使用MySql)


    连接使用MySql

    安装MySql模块:

     npm install mysql 

    创建连接:

     1 const mysql = require('mysql')
     2 
     3 // 连接 mysql 服务器
     4 const connection = mysql.createConnection({
     5   host: '127.0.0.1',
     6   user: 'root',//数据库访问的用户名
     7   password: '123456',//数据库访问的密码
     8   port: '3306',//数据库端口号
     9   database: 'XXX',//数据库名称
    10 })
    11 // 执行SQL
    12 connection.query(sql, function (err, result) {
    13   err // 错误信息
    14   result // 结果
    15 })
    16 // 销毁连接 | 由于 JS 是异步的,所以当前代码会在执行 SQL 之前就销毁了连接
    17 connection.destroy()

    用 createConnection 创建 Mysql 连接,每执行一次 connection.query 都是一个全新的连接,会造成一个资源的极大浪费,降低性能。

    连接池是另外的一种执行方法,它一次性的创建了多个连接,然后根据客户端的查询,自动的 分发、复用、管理 这些连接。

     1 const mysql = require('mysql')
     2 
     3 //创建连接池
     4 const pool = mysql.createPool({
     5   host: '127.0.0.1',
     6   user: 'root',//数据库访问的用户名
     7   password: '123456',//数据库访问的密码
     8   port: '3306',//数据库端口号
     9   database: 'XXX',//数据库名称
    10 })
    11 
    12 const db = {  
    13    sqlQuery(sql, values) {
    14     return new Promise((resolve, reject) => {
    15       pool.getConnection((err, connection) => {
    16         if (err) {
    17           reject(err)
    18         } else {
    19           if (values) {
    20             connection.query(sql, values, (err, rows) => {
    21               if (err) {
    22                 reject(err)
    23               } else {
    24                 resolve(rows)
    25               }
    26               connection.release()
    27             });
    28           } else {
    29             connection.query(sql, (err, rows) => {
    30               if (err) {
    31                 reject(err)
    32               } else {
    33                 resolve(rows)
    34               }
    35               connection.release()
    36             });
    37           }
    38         }
    39       })
    40     })
    41   }
    42 }

    MySql查询变量用一个 ?号 作为占位符(防止SQL注入):

    1 var query = 'UPDATE users SET foo = ?, bar = ?, baz = ? WHERE id = ?',
    2     value = ['a', 'b', 'c', userId];
    3 connection.query(query, value, (error, results, fields) => { /* ... */ });

    第一个参数 query 是一个字符串,是查询的 sql 语句,含有占位符。

    第二个参数 value 是一个数组,含有所有占位符的值。

    标识符(数据库、表、列名)用两个 ?号 做占位符(即 ?? ),除此之外,可以将标识符的名字当成 query 变量一起传进值列表中:

    1 var query = 'UPDATE ?? SET foo = ?, bar = ?, baz = ? WHERE id = ?',
    2     value = ['users', 'a', 'b', 'c', userId];
    3 connection.query(query, value, (error, results, fields) => { /* ... */ });
  • 相关阅读:
    推理思维
    模糊数学
    Android 加法程序
    线程特点
    单例模式的优缺点
    lua 字符串过滤,特殊字符过滤
    cocos2dx
    cocos2dx之控制台输出
    C++基础(using)
    生活常识
  • 原文地址:https://www.cnblogs.com/JHelius/p/11646001.html
Copyright © 2020-2023  润新知