nodejs mysql 数据查询例子
1、安装nodejs
2、安装mysql npm包
地址:https://github.com/felixge/node-mysql
npm install mysql
3、相应API查看及调用:
var mysql = require('mysql');
var connection = mysql.createConnection({
host : 'localhost',
user : 'me',
password : 'secret'
}); connection.connect(); connection.query('SELECT 1 + 1 AS solution', function(err, rows, fields) {
if (err) throw err; console.log('The solution is: ', rows[0].solution);
}); connection.end();
4、相关注意点及方法
将相应结果进行文件形式保存,使用fs文件系统及path路径模块
var $ = require('underscore');
var fs = require('fs');
var path = require('path');
underscore为数据处理集合,可以简单快捷的进行数据的遍历拼接等处理
npm install underscore
connection.query('select * from xmmember', function (err, rows) {//account 用户账户表
if (err) throw err;
var tempAccount = $.map(rows, function (c) {
return {
id: c.ID,
name: c.m_username,
password: c.m_userpass,
surePassword: c.m_userpass,
qq: c.qq
}
});
fs.writeFile(path.join(__dirname, 'account.js'), JSON.stringify(tempAccount), function (err) {
if (err) throw err;
console.log("Export Account Success!");
});
});
将数据查询结果进行JSON格式转换后,导出到具体文件中,方便相应的系统进行导入等管理操作。
相关API方法:
1、配置query格式,进行相应update的操作,代码如下:
connection.config.queryFormat = function (query, values) {
if (!values) return query;
return query.replace(/\:(\w+)/g, function (txt, key) {
if (values.hasOwnProperty(key)) {
return this.escape(values[key]);
}
return txt;
}.bind(this));
}; connection.query("UPDATE posts SET title = :title", { title: "Hello MySQL" });
2、执行insert操作。如下:
connection.query('INSERT INTO posts SET ?', {title: 'test'}, function(err, result) {
if (err) throw err; console.log(result.insertId);
});
3、删除delete的执行,示例代码以下:
connection.query('DELETE FROM posts WHERE title = "wrong"', function (err, result) {
if (err) throw err; console.log('deleted ' + result.affectedRows + ' rows');
})
4、大量数据查询及操作时候,可以加入相应的容错处理:示例代码如下:
var query = connection.query('SELECT * FROM posts');
query
.on('error', function(err) {
// Handle error, an 'end' event will be emitted after this as well
})
.on('fields', function(fields) {
// the field packets for the rows to follow
})
.on('result', function(row) {
// Pausing the connnection is useful if your processing involves I/O
connection.pause(); processRow(row, function() {
connection.resume();
});
})
.on('end', function() {
// all rows have been received
});
其中,err为具体出现错误时候,所需要进行的错误处理。
fields为具体的执行的结果集合
row为具体结果集每行的处理,可暂停执行及恢复执行。
5、多个查询的同时执行处理,示例代码如下:
先进行如下配置:
var connection = mysql.createConnection({multipleStatements: true});
即可进行多个语句的执行,写法如下:
connection.query('SELECT 1; SELECT 2', function(err, results) {
if (err) throw err; // `results` is an array with one element for every statement in the query:
console.log(results[0]); // [{1: 1}]
console.log(results[1]); // [{2: 2}]
});
6、结果进行组装处理,代码如下:
var options = {sql: '...', nestTables: true};
connection.query(options, function(err, results) {
/* results will be an array like this now:
[{
table1: {
fieldA: '...',
fieldB: '...',
},
table2: {
fieldA: '...',
fieldB: '...',
},
}, ...]
*/
});
或使用如下方式:
var options = {sql: '...', nestTables: '_'};
connection.query(options, function(err, results) {
/* results will be an array like this now:
[{
table1_fieldA: '...',
table1_fieldB: '...',
table2_fieldA: '...',
table2_fieldB: '...',
}, ...]
*/
});
7、事物的执行及处理。代码如下:
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!');
});
});
});
});
beginTransaction(), commit() and rollback() 三个方法分别针对SQL事物的开始执行,提交,回滚三个操作。
8、执行超时的捕捉处理,示例代码如下:
connection.query({sql: 'SELECT COUNT(*) AS count FROM big_table', timeout: 60000}, function (err, rows) {
if (err && err.code === 'PROTOCOL_SEQUENCE_TIMEOUT') {
throw new Error('too long to count table rows!');
} if (err) {
throw err;
} console.log(rows[0].count + ' rows');
});
9、同时可以对SQL错误代码的处理,示例代码如下:
var connection = require('mysql').createConnection({
port: 84943, // WRONG PORT
}); connection.connect(function(err) {
console.log(err.code); // 'ECONNREFUSED'
console.log(err.fatal); // true
}); connection.query('SELECT 1', function(err) {
console.log(err.code); // 'ECONNREFUSED'
console.log(err.fatal); // true
});
最后,node mySQL提供强大的数据池群处理,以及SSL加密验证功能,在此不做说明,可查看具体API。
本文档参照API简略书写,如有错误,敬请原谅。
nodejs mysql 数据查询例子的更多相关文章
- Phantomjs+Nodejs+Mysql数据抓取(2.抓取图片)
概要 这篇博客是在上一篇博客Phantomjs+Nodejs+Mysql数据抓取(1.抓取数据) http://blog.csdn.net/jokerkon/article/details/50868 ...
- mysql 数据查询全讲
数据查询 涉及到DQL(Data Query Language)是sql语句的一类 本文全面介绍了mysql下 select 语句的各种查询方式:普通查询,模糊查询,查询排序,分页查询,聚合函数查询 ...
- MySQL数据查询之单表查询
单表查询 简单查询 - 创建表 DROP TABLE IF EXISTS `person`; CREATE TABLE `person` ( `id` ) NOT NULL AUTO_INCREMEN ...
- MySQL - 数据查询 - 简单查询
1. 简述 查询数据是指从数据库中获取所需要的数据.如Jack 要达到验证用户名和密码的目的,就需要从数据库已保存的用户表中读取当前用户的密码进行验证,以验明正身!保存查询数据是数据库操作中常用且重要 ...
- MySQL数据查询之多表查询
多表查询 多表联合查询 #创建部门 CREATE TABLE IF NOT EXISTS dept ( did int not null auto_increment PRIMARY KEY, dna ...
- 笔记-4:mysql数据查询
1.创建查询表 1.1 创建班级表 含义 字段名 数据类型 宽度 班级编号 classNo 字符型 6 班级名称 className 字符型 20 所属院系 department 字符型 30 年级 ...
- 【初学python】使用python连接mysql数据查询结果并显示
因为测试工作经常需要与后台数据库进行数据比较和统计,所以采用python编写连接数据库脚本方便测试,提高工作效率,脚本如下(python连接mysql需要引入第三方库MySQLdb,百度下载安装) # ...
- Packets larger than max_allowed_packet are not allowed(mysql数据查询提示:不允许超过允许的最大数据包)解决方案
问题背景: 首先我的项目运用的时Mysql,在做一个数据更新操作的时候,提示异常:System.Exception:“ExecuteNonQuery:Packets larger than max_a ...
- MySQL数据查询
数据查询语言DQL select [all | distinct] 字段或表达式列表 [from子句] [where子句] [group by子句] [having子句] [order by子句] [ ...
随机推荐
- struts2标签库----数据标签详解
上篇文章我们介绍struts2标签库中的控制标签的基本使用和部分原理,本篇文章接着了解下标签库中有关数据标签的使用和原理.主要涉及以下数据标签: action标签:用于在视图页面跳转到一个Action ...
- shell脚本——mysql
很期待,学习shell脚本,减少重复工作 自动安装配置mysql脚本: #/bin/bash LOG_FILE=/home/hadoop1/log/installmysql.log function ...
- Hbase的存储
Hbase在生态系统中的位置 Hbase存储的逻辑视图 Hbase的存储格式 Hbase写数据流程 Hbase快速响应数据 Hbase在生态系统中的位置 HBase位于结构化存储层,Hadoop HD ...
- 简化的CDN架构分析
CDN架构的设计目标是通过复制系统资源(即Web服务器)的方式来获得高性能和高扩展性,为了能确保在海量内容下可以稳定提供高性能的服务.系统资源的复制可以在本地和地理两个尺度上进行.如果是本地复制则响应 ...
- python函数式编程之迭代器
什么是迭代器 顾名思义,就是更新换代的意思 python中的迭代器就是根据上一个结果生成下一个结果,一直循环往复不断重复的过程 迭代器有两个特点: 1.不断重复同一个过程 2.根据上一个结果生成下一个 ...
- 20 个 CSS 高级技巧汇总
原文:https://segmentfault.com/a/1190000003936841 使用技巧会让人变的越来越懒,没错,我就是想让你变懒.下面是我收集的CSS高级技巧,希望你懒出境界. 1. ...
- 【前端】HTML中最适合做按钮的元素
转载请注明出处:http://www.cnblogs.com/shamoyuu/p/6405914.html 可选的可以做按钮的元素有如下几个 a.input.button.div(span等) 场景 ...
- Android的ListView异步加载图片时,错位、重复、闪烁问题的分析及解决方法
Android ListView异步加载图片错位.重复.闪烁分析以及解决方案,具体问题分析以及解决方案请看下文. 我们在使用ListView异步加载图片的时候,在快速滑动或者网络不好的情况下,会出现图 ...
- GOF 23种设计模式
设计模式目录 创建型 1. Factory Method(工厂方法) 2. Abstract Factory(抽象工厂) 3. Builder(建造者) 4. Prototype(原型) 5. Sin ...
- JAVA之编码---->CSV在文本下是正常的,用EXCEL打开是乱码的问题
JAVA之编码---->CSV在文本下是正常的,用EXCEL打开是乱码的问题 在JAVA下输出文件流,保存成CSV(用UTF-8)文件,怎么处理用EXCEL下是乱码,但是在记事本等其他软件都是正 ...