zoukankan      html  css  js  c++  java
  • 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) => { /* ... */ });
  • 相关阅读:
    5.颜色空间转换
    Linux下的解压命令
    4.图像模糊/图像平滑
    insightface作者提供数据训练解读
    MXNetError: [05:53:50] src/operator/nn/./cudnn/cudnn_convolution-inl.h:287
    python中import cv2遇到的错误及安装方法
    docker 安装 mxnet
    95. Unique Binary Search Trees II
    236. Lowest Common Ancestor of a Binary Tree
    124. Binary Tree Maximum Path Sum
  • 原文地址:https://www.cnblogs.com/JHelius/p/11646001.html
Copyright © 2011-2022 走看看