zoukankan      html  css  js  c++  java
  • node.js操作MySQL数据库

    MySQL数据库作为最流行的开源数据库。基本上是每个web开发者必须要掌握的数据库程序之一了。


     

    基本使用

    node.js上,最受欢迎的mysql包就是mysql模块。

    npm install mysql

    然后在js脚本里面直接引用进来

    var mysql      = require('mysql');

    配置mysql的数据库连接。

    var connection = mysql.createConnection({
      host     : 'ip',
      user     : '用户名',
      password : '密码',
      database : 'dbname'
    });
    connection.connect();

    这样就拿到了一个连接。

    然后就可以愉快的进行各种curd操作了。

    node.js对数据库的curd都在query这个方法里面。这点和ado.net有很大的区别。

    你的所有的操作,都从query的回调函数里面获得结果

    connection.query('SELECT 1 + 1 AS solution', function (error, results, fields) {
      if (error) throw error;
      console.log('The solution is: ', results[0].solution);
    });

     

    连接池操作

    在单机软件中,我们之间使用简单获得一个连接,然后就行了。

    但是在面向互联网的web服务里面,频繁的创建和关闭连接,是很消耗服务器性能的。

    于是我们的前辈们发明了各种池子。比如多线程操作中的线程池,游戏开发中的对象池,当然还包括数据库操作的连接池。

    创建连接池:

    var mysql = require('mysql');
    var pool  = mysql.createPool({
      connectionLimit : 连接池数量,
      host            : 'ip地址',
      user            : '账号',
      password        : '密码',
      database        : '数据库名称'
    });

    然后就是和上文一样的curd操作

    //从连接池中获取一个连接
    pool.getConnection(function(errconnection{
      if (errthrow err// not connected!
     
      // 使用这个连接curd
      connection.query('SELECT something FROM sometable'function (errorresultsfields{
        // 使用完之后,记得把这个连接放到连接池里面去
        connection.release();
     
        // Handle error after the release.
        if (errorthrow error;
     
      });
    });

    如果你的程序要退出,请把调用连接池的end()方法。不然程序会卡在后台,一直退出失败。

    封装成Promise

    在ES6中,可以直接用和C#的await一样的语法去调用js的异步函数。

    但是要求这个函数必须是async声明和返回值是Promise对象。

    query = function (sql, arr, callback) {
        console.log('获取一个连接');
        return new Promise(function (resolve, reject) {
            pool.getConnection(function (err, connection) {
                if (err) {
                    reject(err);// not connected!
                } else {
                    console.log('开始查询');
                    connection.query(sql, arr, function (error, results, fields) {
                        connection.release();
                        console.log('连接已经释放,返回结果');
    
                        if (error) reject(error);
                        // callback && callback(results, fields)
                        resolve({
                            rows: results,
                            fields: fields
                        })
                    });
                }
    
    
            });
        })
    
    
    }

    简单的用法到这里就结束了。当然还有更高级的用法,比如MySQL的Cluster操作等。有兴趣的话,可以去研究,因为我目前用不到这种功能,所有就不往后去深究了。

    有需要交流的欢迎大家加入QQ群:545594312

  • 相关阅读:
    Solr查询参数sort(排序)
    使用SolrNet访问Solr-5.5.0
    java impl
    Solr Facet 搜索时,facet.missing = true 的真正含义
    为solr增加用户验证
    每日晨读_20140705
    说说常用的服务器操作
    如何添加自定义脚本到开机自启动
    记录一个mysql连接慢的问题
    javascript时间戳和日期字符串相互转换
  • 原文地址:https://www.cnblogs.com/boxrice/p/11734034.html
Copyright © 2011-2022 走看看