Nodejs学习笔记(六)--- Mysql连接

安装

Mysql安装
http://ftp.ntu.edu.tw/MySQL/Downloads/MySQLInstaller/
版本: mysql-installer-community-5.7.17.0.msi
可视化界面工具: MySQL-Front_V5.4.4.153_Setup
安装教程:http://jingyan.baidu.com/article/363872ec2e27076e4ba16fc3.html
关于密码:admin/admin root/admin
http://www.jb51.net/article/71888.htm
http://blog.csdn.net/kindroid/article/details/51018107

Node.js与MySQL交互操作有很多库,具体可以在 https://www.npmjs.org/search?q=mysql 查看。
  地址:https://github.com/felixge/node-mysql
     https://www.npmjs.org/package/mysql

安装
npm install mysql
image.png

测试MySQL

建库并插入记录
CREATE DATABASE IF NOT EXISTS learn_nodejs CHARACTER SET UTF8;

USE learn_nodejs;

SET FOREIGN_KEY_CHECKS=0;

DROP TABLE IF EXISTS `userinfo`;
CREATE TABLE `userinfo` (
  `Id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `UserName` varchar(64) NOT NULL COMMENT '用户名',
  `UserPass` varchar(64) NOT NULL COMMENT '用户密码',
  PRIMARY KEY (`Id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用户信息表';


show databases
image.png
image.png

其他:http://blog.csdn.net/u010882595/article/details/9666819

nodejs连接mysql -- 1_mysql.js
//1_mysql.js
var mysql = require('mysql');  //调用mysql模块

//创建一个connection

var connection = mysql.createConnection({
  host     : '192.168.41.36',
  user     : 'root',
  password : 'admin',
  port: '3306',
  database: 'learn_nodejs',
});

//建立连接
connection.connect(function(err){
    if(err){
        console.log('connection connect err - :'+err);
        return;
    }

        console.log('connection connect success!');
});


//执行sql
connection.query('select 1 AS solution', function(err,rows,fields){
    if(err){
        console.log('connection query err - :'+err);
        return;
    }

        console.log('solution :'+rows[0].solution);
});


//关闭 connection
connection.end(function(err){
    if(err){
        console.log('connection end err - :'+err);
        return;
    }

        console.log('connection end success!');
});

报错:

image.png

原因:用户未赋权
解决:
主要赋权sql

1. GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'%' IDENTIFIED BY 'mypassword' WITH GRANT OPTION;
2.FLUSH PRIVILEGES;
image.png

执行返回显示:

image.png

ps:这里链接是当时另外的一个库,算作是库链接的测试,下面真实表单库还是在 learn_nodejs,这个当时是上周写的,后来又重新整理下,截图没做修改,意思到了就好,在此做个说明。

Connection Options

host:主机地址 (默认:localhost)
  user:用户名
  password:密码
  port:端口号 (默认:3306)
  database:数据库名
  charset:连接字符集(默认:'UTF8_GENERAL_CI',注意字符集的字母都要大写)
  localAddress:此IP用于TCP连接(可选)
  socketPath:连接到unix域路径,当使用 host 和 port 时会被忽略
  timezone:时区(默认:'local')
  connectTimeout:连接超时(默认:不限制;单位:毫秒)
  stringifyObjects:是否序列化对象(默认:'false' ;与安全相关https://github.com/felixge/node-mysql/issues/501
  typeCast:是否将列值转化为本地JavaScript类型值 (默认:true)
  queryFormat:自定义query语句格式化方法 https://github.com/felixge/node-mysql#custom-format
  supportBigNumbers:数据库支持bigint或decimal类型列时,需要设此option为true (默认:false)
  bigNumberStrings:supportBigNumbers和bigNumberStrings启用 强制bigint或decimal列以JavaScript字符串类型返回(默认:false)
  dateStrings:强制timestamp,datetime,data类型以字符串类型返回,而不是JavaScript Date类型(默认:false)
  debug:开启调试(默认:false)
  multipleStatements:是否许一个query中有多个MySQL语句 (默认:false)
  flags:用于修改连接标志,更多详情:https://github.com/felixge/node-mysql#connection-flags
  ssl:使用ssl参数(与crypto.createCredenitals参数格式一至)或一个包含ssl配置文件名称的字符串,目前只捆绑Amazon RDS的配置文件

实现增,删,改,查

//1_mysql.js
var mysql = require('mysql');  //调用mysql模块

//创建一个connection
var connection = mysql.createConnection({
  host     : '192.168.41.36',
  user     : 'root',
  password : 'admin',
  port: '3306',
  database: 'tiany_learnnodejs',
});

//建立连接
connection.connect(function(err){
    if(err){
        console.log('connection connect err - :'+err);
        return;
    }

        console.log('connection connect success!');
});

var  userAddSql = 'INSERT INTO userinfo(Id,UserName,UserPass) VALUES(0,?,?)';
var  userAddSql_Params = ['tiany', 'tiany'];
//增
connection.query(userAddSql,userAddSql_Params,function (err, result) {
        if(err){
         console.log('INSERT ERROR - ',err.message);
         return;
        }        

       console.log('--------------------------INSERT----------------------------');      
       console.log('INSERT ID:',result);        
       console.log('-----------------------------------------------------------------');  
});

//关闭 connection
connection.end(function(err){
    if(err){
        console.log('connection end err - :'+err);
        return;
    }

        console.log('connection end success!');
});
image.png

执行成功:

image.png

数据库中显示:

image.png

//3_mysql_update.js
var mysql = require('mysql');  //调用mysql模块

//创建一个connection
var connection = mysql.createConnection({
  host     : '192.168.41.36',
  user     : 'root',
  password : 'admin',
  port: '3306',
  database: 'learn_nodejs',
});

//建立连接
connection.connect(function(err){
  if(err){
    console.log('connection connect err - :'+err);
    return;
  }

    console.log('connection connect success!');
});

var userModSql = 'UPDATE userinfo SET UserName = ?,UserPass = ? WHERE Id = ?';
var userModSql_Params = ['liuzy', 'liuzy',1];
//改
connection.query(userModSql,userModSql_Params,function (err, result) {
   if(err){
         console.log('UPDATE ERROR - ',err.message);
         return;
   }        
  console.log('--------------------------UPDATE----------------------------');
  console.log('UPDATE affectedRows',result.affectedRows);
  console.log('-----------------------------------------------------------------');
});

//关闭 connection
connection.end(function(err){
  if(err){
    console.log('connection end err - :'+err);
    return;
  }

    console.log('connection end success!');
});

image.png

执行结果:

image.png
image.png

//5_mysql_delete.js
var mysql = require('mysql');  //调用mysql模块

//创建一个connection
var connection = mysql.createConnection({
  host     : '192.168.41.36',
  user     : 'root',
  password : 'admin',
  port: '3306',
  database: 'learn_nodejs',
});

//建立连接
connection.connect(function(err){
    if(err){
        console.log('connection connect err - :'+err);
        return;
    }

        console.log('connection connect success!');
});

var  userGetSql = 'SELECT * FROM userinfo';
//查
connection.query(userGetSql,function (err, result) {
        if(err){
          console.log('query ERROR - ',err.message);
          return;
        }        

       console.log('--------------------------query----------------------------');
       console.log(result);        
       console.log('---------------------------------------------------------------');  
});

//关闭 connection
connection.end(function(err){
    if(err){
        console.log('connection end err - :'+err);
        return;
    }

        console.log('connection end success!');
});
image.png

执行结果:

image.png

//4_mysql_query.js
var mysql = require('mysql');  //调用mysql模块

//创建一个connection
var connection = mysql.createConnection({
  host     : '192.168.41.36',
  user     : 'root',
  password : 'admin',
  port: '3306',
  database: 'learn_nodejs',
});

//建立连接
connection.connect(function(err){
    if(err){
        console.log('connection connect err - :'+err);
        return;
    }

        console.log('connection connect success!');
});

var  userDelSql = 'DELETE FROM userinfo';
//删
connection.query(userDelSql,function (err, result) {
        if(err){
          console.log('DELETE ERROR - ',err.message);
          return;
        }        

       console.log('--------------------------DELETE----------------------------');
       console.log('DELETE affectedRows',result.affectedRows);
       console.log('---------------------------------------------------------------');  
});

//关闭 connection
connection.end(function(err){
    if(err){
        console.log('connection end err - :'+err);
        return;
    }

        console.log('connection end success!');
});
image.png

执行结果:

image.png
image.png
结束数据库连接两种方法和区别

结束连接其实有两种方法end(),destory();
  end()
  end()方法在queries都结束后执行,end()方法接收一个回调函数,queries执行出错,仍然后结束连接,错误会返回给回调函数err参数,可以在回调函数中处理!
  destory()
  比较暴力,没有回调函数,即刻执行,不管queries是否完成!

连接池Pooling connections

可以看下:
http://cnodejs.org/topic/58378543bde2b59e06141f5a
以后写到具体项目时会再详细说明。

另外:
在nodejs学习笔记(一)时已经写明笔记参考来源,也算是站在巨人的肩膀上,在此再次附上链接 http://www.cnblogs.com/zhongweiv/p/nodejs_mysql.html ,分享给大家,有兴趣的朋友可以直接去看看,再次感谢porschev大神资源。

使用:http://www.csdn123.com/html/blogs/20130413/2092.htm

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,884评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,755评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,369评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,799评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,910评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,096评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,159评论 3 411
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,917评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,360评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,673评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,814评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,509评论 4 334
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,156评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,882评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,123评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,641评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,728评论 2 351

推荐阅读更多精彩内容