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) => { /* ... */ });
  • 相关阅读:
    再次或多次格式化导致namenode的ClusterID和datanode的ClusterID之间不一致的问题解决办法
    Linux安装aria2
    POJ 3335 Rotating Scoreboard 半平面交
    hdu 1540 Tunnel Warfare 线段树 区间合并
    hdu 3397 Sequence operation 线段树 区间更新 区间合并
    hud 3308 LCIS 线段树 区间合并
    POJ 3667 Hotel 线段树 区间合并
    POJ 2528 Mayor's posters 贴海报 线段树 区间更新
    POJ 2299 Ultra-QuickSort 求逆序数 线段树或树状数组 离散化
    POJ 3468 A Simple Problem with Integers 线段树成段更新
  • 原文地址:https://www.cnblogs.com/JHelius/p/11646001.html
Copyright © 2011-2022 走看看