• node基础14:连接数据库


    1.连接数据库

    node本身没有连接数据库的功能,需要安装一些中间库来支持。本节,我讲学习连接mysql。

    首先需要安装mysql,需要去mysql官网下载mysql,并安装。也需要安装一个mysql可视化管理工具,这个也可以在mysql官网下载。

    第一步:

    去官网下载好mysql,并且安装。如果是mac os 系统,必须记下localhost服务器的初始密码(截图),安装好了之后,新建一个database,这时候提醒你,需要更改初始密码。更改初始密码之后,你才可以进行mysql指令的操作。

    第二步:

    第三步:

    /**
     * Created by gaoxiong on 2017/1/7.
     */
    var mysql = require('mysql');
    //create a connect object
    var connection = mysql.createConnection({
        host:'localhost',
        user:'root',
        password:'12345678',
        database:'school',
        port:'3306'
    });
    
    //connect database
    connection.connect(function(err){
        if(err){
            console.log('connect-'+err);
            return;
        }
        console.log('connected successful');
    });
    
    var userAddSql = 'insert into user (uname, password) values(?, ?)';
    var param = ['gaoxiong', '123456'];
    connection.query(userAddSql, param, function(err, result){
        if(err){
            console.log('query',err.message);
            return;
        } else {
            console.log('insert sucessful');
        }
    })
    
    connection.query('select * from user', function(err,result,fields){
        if(err){
            console.log('err',err.message);
        }else {
            console.log(result[0]);
            console.log(fields);//内容比较多
        }
    })
    
    // close connect
    connection.end(function(err){
        if(err){
            console.log(' close connect-'+err);
            return;
        }
        console.log('close successful');
    });

    以上就完成连接数据库,并且插入一条数据的功能。需要注意的是数据库查询的语句都是异步的。以上连接的方法叫做 直接连接,非常消耗内存。

    2.连接池连接

    先理解概念,何为连接池连接:通俗的理解,一开始就建立了很多条连接(这些连接组成了一个连接池),当你需要需要的时候,取出一条连接线,在这条连接线使用完成之后,将其释放,这条连接线就会回到连接池中。

    这种连接池连接也是前辈造好的轮子(中间库),名字叫做 node-mysql,需要全局安装。

    npm install -g node-mysql

    代码如下:

    /**
     * mysqlPool.js
     * Created by gaoxiong on 2017/1/7.
     */
    var mysql = require('mysql');
    function optPool() {
        this.isConnected = true;
        this.pool = mysql.createPool({
            host:'localhost',
            user:'root',
            password:'12345678',
            database:'school',
            port:'3306'
        });
        this.getPool = function(){
            if (this.isConnected){
                this.pool.on('connection', function(connection){
                    connection.query('SET SESSION auto_increment_increment = 1');
                    this.isConnected = false;
                })
            }
            return this.pool;
        };
    }
    
    module.exports = optPool;
    /**
     * pool.js
     * Created by gaoxiong on 2017/1/7.
     */
    var OptPool = require('./mysqlPool');
    
    //创建连接池
    var optPool = new OptPool();
    var pool = optPool.getPool();
    
    //从连接池中获取一个连接
    pool.getConnection(function(err, conn){
        console.log(' begin insert');
        var userAddSql = ' insert into user (uname, password) values(?,?)';
        var prama = ['gaoxiong','123456'];
        conn.query(userAddSql, prama, function(err,res) {// 异步操作了
            if(err){
                console.log(err);
                return;
            } else {
                console.log(res);
                console.log('insert successful');
            };
        });
        console.log('insert end');
        console.log('begin select ')
        conn.query(' select * from user ', function(err,res) {// 异步操作了
            if(err){
                console.log(err);
                return;
            } else {
                console.log(res[0]);
            };
            conn.release();//放回连接池
        });
        console.log('select over');
    });

    在终端中执行:node pool.js 就可以看到效果了,哈哈哈哈啊哈哈。nice啊。

  • 相关阅读:
    智能指针之第二印象
    网易实习笔试真题C/C++
    map,hash_map和unordered_map 实现比较
    斐波那契堆(一)之 图文解析 和 C语言的实现
    二项堆(一)之 图文解析 和 C语言的实现
    寻找最小的k个数
    P、NP、NP-Complete、NP-hard问题
    网易有道笔试:求连通图的割点(关节点)
    块设备的读流程分析
    不相交集(The Disjoint Set ADT)
  • 原文地址:https://www.cnblogs.com/noper/p/6261616.html
Copyright © 2020-2023  润新知