nodejs笔记(3)--mysql
来源:互联网 发布:sql内连接和外连接 编辑:程序博客网 时间:2024/06/07 01:20
node与Mysql
安装mysql模块
npm install mysql
按照官方案例做个demo:
var mysql = require("mysql");//建立一个连接var connection = mysql.createConnection({ host : '192.168.28.205', user : 'root', password: '123456', port:'3306', database:'test'});//建立连接connection.connect( function(err){ if(err){ console.log(err); return; } console.log("connection success") })//执行一条sqlconnection.query('select 1+1 as anwser',function(err,rows,fields){ if(err)throw err; console.log('The anwser is: ', rows[0].anwser);})//关闭连接connection.end( function(err){ if(err){ console.log(err); return; } console.log("connection end") })输出 connection success2connection end
继续深入,增删改查:
var mysql = require("mysql");//建立一个连接var connection = mysql.createConnection({ host : '192.168.28.205', user : 'root', password: '123456', port:'3306', database:'test'});//建立连接connection.connect()//执行一条sql/*connection.query('select 1+1 as anwser',function(err,rows,fields){ if(err)throw err; console.log('The anwser is: ', rows[0].anwser);})*///增删改查var sqlState1 = "insert into node_test(name,id,job) values(?,?,?)";var sqlState2 = "update node_test set name=? , job = ? where id = ?";var sqlState3 = "select *from node_test where id = ?";var sqlState4 = "delete from node_test where id = ?";var param1 = ["bonita","0","student"];var param2 = ["tom","engineer","0"];var param3 = "0";connection.query(sqlState1,param1,function(err,result){ if(err) throw err; console.log(result);});//关闭连接connection.end()
结束数据库连接end()和destroy()
end()接受一个回调函数,并且会在query结束之后才触发,如果query出错,仍然会终止链接,错误会传递到回调函数中处理。
destroy()立即终止数据库连接,即使还有query没有完成,之后的回调函数也不会在触发
连接池:
var mysql = require("mysql");//建立一个连接池var pool = mysql.createPool({ host:'192.168.28.205', port:'3306', user:'root', password:'123456', database:'test'})//管理连接池function getPoolCon(sql) { pool.getConnection(function(err,connection){ if(!connection || err){ console.log(err); return; } connection.query(sql,function(err,result){ if(err)throw err; console.log(result); connection.release();//释放连接 }); /*connection.query("select * from node_test",function(err,result){ if(err)throw err; console.log(result); connection.release(); });*/ //这里错误了,应该重新去连接池获取新的连接 })}getPoolCon("select * from node_test")
重新建立连接:
var mysql = require("mysql");//建立一个连接var connection = mysql.createConnection({ host : '192.168.28.205', user : 'root', password: '123456', port:'3306', database:'test'});function getConnect(){ connection.connect(function(err){ if(err){ console.log("建立连接失败:",err); setTimeout(getConnect, 2000); }else{ console.log("connect success") } }); // 如果是连接断开,自动重新连接 connection.on("error",function(err){ if(err.code === 'PROTOCOL_CONNECTION_LOST'){ getConnect(); }else{ throw err; } })}getConnect();
连接池集群技术:
连接池集群可以提供多个主机连接
//创建连接池集群var poolCluster = mysql.createPoolCluster();//添加配置 config是一个连接池配置poolCluster.add(config);//使用自动名称添加配置poolCluster.add('MASTER',masterConfig);//添加命名配置poolCluster.add('SLAVE1',slave1config);poolCluster.add('SLAVE2',slave2config);//删除配置poolCluster.remove('SLAVE1');//根据配置名字poolCluster.remove('SLAVE*')//根据匹配到的//获取连接 从所有的连接池里获得 默认选择器 poolCluster.getConnectiuon(function(err,connection){});//从 一个连接池里面获取连接poolCluster.getConnectiuon('MASTER',function(err,connection){});//从匹配到的连接池组里面获取连接 按照顺序//如果SLAVE1出错 就从SLAVE2获得连接poolCluster.getConnectiuon('SLAVE*','ORDER',function(err,connection){} );//触发事件 当删除连接池时触发poolCluster.on('remove',function(nodeId){ console.log(nodeId);//被删除的连接池名字});//配置 选择器 从SLAVE1 SLAVE2 里面随机获得连接var pool = poolCluster.of('SLAVE*','RANDOM');pool.getConnectiuon(function(err,connection){});//关闭连接池集群poolCluster.end();
切换用户/改变连接状态:
参数 user: 新的用户 (默认为早前的一个). password: 新用户的新密码 (默认为早前的一个). charset: 新字符集 (默认为早前的一个). database: 新数据库名称 (默认为早前的一个). connection.changeUser({user : 'john'}, function(err) { if (err) throw err;});
为了避免SQL注入攻击,需要转义用户提交的数据。可以使用connection.escape() 或者 pool.escape()
或者使用占位符?
可以使用??作为标识符的占位符
var sql = 'SELECT * FROM users WHERE id = ' + connection.escape(userId); connection.query(sql, function(err, results) { // ...});var query = connection.query('SELECT ?? FROM ?? WHERE id = ?', [columns, 'users', userId], function(err, results) { // ... });
事务处理:
connection.beginTransaction(function(err) { if (err) { throw err; } connection.query('INSERT INTO posts SET title=?', title, function(err, result) { if (err) { connection.rollback(function() { throw err; }); } var log = 'Post ' + result.insertId + ' added'; connection.query('INSERT INTO log SET data=?', log, function(err, result) { if (err) { connection.rollback(function() { throw err; }); } connection.commit(function(err) { if (err) { connection.rollback(function() { throw err; }); } console.log('success!'); }); }); }); });
0 0
- nodejs笔记(3)--mysql
- nodejs学习笔记-2-mysql
- Nodejs学习笔记(四)与MySQL交互
- Nodejs笔记(3)——事件
- nodejs学习笔记3
- nodejs学习笔记3
- Nodejs笔记(三)
- Nodejs学习笔记(四)与MySQL交互(felixge/node-mysql)
- Nodejs学习笔记(四)与MySQL交互(felixge/node-mysql)
- 深入浅出NodeJS笔记(一)
- 深入浅出NodeJS笔记(一)
- 深入浅出NodeJS笔记(二)
- 深入浅出NodeJS笔记(三)
- nodejs简介笔记(一)
- nodejs简介笔记(二)
- Nodejs学习笔记(一)
- Nodejs学习笔记(一)
- Nodejs学习笔记(二)
- 返回头部滑动动画[KoalaShane]
- 常用设计者模式---适配器模式
- 支付宝支付问题记录
- 随机生成n位随机数(包含大写字母、小写字母、数字)
- 蓝桥杯 2016 4 快速排序
- nodejs笔记(3)--mysql
- Executors的四种线程池
- 1060. 爱丁顿数(25)
- maven install Failed to execute goal org.apache.maven.plugins:maven-war-plugin:2.1.1:war (default-wa
- OAF开发入门
- 机器学习(周志华)习题解答2.1-2.9
- Mbed在自己的stm32系列平台移植适配(一)
- javaBean四个作用域范围
- 修改新建的ionic项目中默认根据id进行的通讯录信息匹配