1、安装nodejs

2、安装mysql  npm包

地址:https://github.com/felixge/node-mysql

  1. npm install mysql

3、相应API查看及调用:

  1. var mysql = require('mysql');
  2. var connection = mysql.createConnection({
  3. host : 'localhost',
  4. user : 'me',
  5. password : 'secret'
  6. });
  7.  
  8. connection.connect();
  9.  
  10. connection.query('SELECT 1 + 1 AS solution', function(err, rows, fields) {
  11. if (err) throw err;
  12.  
  13. console.log('The solution is: ', rows[0].solution);
  14. });
  15.  
  16. connection.end();

4、相关注意点及方法

将相应结果进行文件形式保存,使用fs文件系统及path路径模块

  1. var $ = require('underscore');
  2. var fs = require('fs');
  3. var path = require('path');

underscore为数据处理集合,可以简单快捷的进行数据的遍历拼接等处理

  1. npm install underscore
  1. connection.query('select * from xmmember', function (err, rows) {//account 用户账户表
  2. if (err) throw err;
  3. var tempAccount = $.map(rows, function (c) {
  4. return {
  5. id: c.ID,
  6. name: c.m_username,
  7. password: c.m_userpass,
  8. surePassword: c.m_userpass,
  9. qq: c.qq
  10. }
  11. });
  12. fs.writeFile(path.join(__dirname, 'account.js'), JSON.stringify(tempAccount), function (err) {
  13. if (err) throw err;
  14. console.log("Export Account Success!");
  15. });
  16. });

将数据查询结果进行JSON格式转换后,导出到具体文件中,方便相应的系统进行导入等管理操作。

相关API方法:

1、配置query格式,进行相应update的操作,代码如下:

  1. connection.config.queryFormat = function (query, values) {
  2. if (!values) return query;
  3. return query.replace(/\:(\w+)/g, function (txt, key) {
  4. if (values.hasOwnProperty(key)) {
  5. return this.escape(values[key]);
  6. }
  7. return txt;
  8. }.bind(this));
  9. };
  10.  
  11. connection.query("UPDATE posts SET title = :title", { title: "Hello MySQL" });

2、执行insert操作。如下:

  1. connection.query('INSERT INTO posts SET ?', {title: 'test'}, function(err, result) {
  2. if (err) throw err;
  3.  
  4. console.log(result.insertId);
  5. });

3、删除delete的执行,示例代码以下:

  1. connection.query('DELETE FROM posts WHERE title = "wrong"', function (err, result) {
  2. if (err) throw err;
  3.  
  4. console.log('deleted ' + result.affectedRows + ' rows');
  5. })

4、大量数据查询及操作时候,可以加入相应的容错处理:示例代码如下:

  1. var query = connection.query('SELECT * FROM posts');
  2. query
  3. .on('error', function(err) {
  4. // Handle error, an 'end' event will be emitted after this as well
  5. })
  6. .on('fields', function(fields) {
  7. // the field packets for the rows to follow
  8. })
  9. .on('result', function(row) {
  10. // Pausing the connnection is useful if your processing involves I/O
  11. connection.pause();
  12.  
  13. processRow(row, function() {
  14. connection.resume();
  15. });
  16. })
  17. .on('end', function() {
  18. // all rows have been received
  19. });

其中,err为具体出现错误时候,所需要进行的错误处理。

fields为具体的执行的结果集合

row为具体结果集每行的处理,可暂停执行及恢复执行。

5、多个查询的同时执行处理,示例代码如下:

先进行如下配置:

  1. var connection = mysql.createConnection({multipleStatements: true});

即可进行多个语句的执行,写法如下:

  1. connection.query('SELECT 1; SELECT 2', function(err, results) {
  2. if (err) throw err;
  3.  
  4. // `results` is an array with one element for every statement in the query:
  5. console.log(results[0]); // [{1: 1}]
  6. console.log(results[1]); // [{2: 2}]
  7. });

6、结果进行组装处理,代码如下:

  1. var options = {sql: '...', nestTables: true};
  2. connection.query(options, function(err, results) {
  3. /* results will be an array like this now:
  4. [{
  5. table1: {
  6. fieldA: '...',
  7. fieldB: '...',
  8. },
  9. table2: {
  10. fieldA: '...',
  11. fieldB: '...',
  12. },
  13. }, ...]
  14. */
  15. });

或使用如下方式:

  1. var options = {sql: '...', nestTables: '_'};
  2. connection.query(options, function(err, results) {
  3. /* results will be an array like this now:
  4. [{
  5. table1_fieldA: '...',
  6. table1_fieldB: '...',
  7. table2_fieldA: '...',
  8. table2_fieldB: '...',
  9. }, ...]
  10. */
  11. });

7、事物的执行及处理。代码如下:

  1. connection.beginTransaction(function(err) {
  2. if (err) { throw err; }
  3. connection.query('INSERT INTO posts SET title=?', title, function(err, result) {
  4. if (err) {
  5. connection.rollback(function() {
  6. throw err;
  7. });
  8. }
  9.  
  10. var log = 'Post ' + result.insertId + ' added';
  11.  
  12. connection.query('INSERT INTO log SET data=?', log, function(err, result) {
  13. if (err) {
  14. connection.rollback(function() {
  15. throw err;
  16. });
  17. }
  18. connection.commit(function(err) {
  19. if (err) {
  20. connection.rollback(function() {
  21. throw err;
  22. });
  23. }
  24. console.log('success!');
  25. });
  26. });
  27. });
  28. });

beginTransaction(), commit() and rollback() 三个方法分别针对SQL事物的开始执行,提交,回滚三个操作。

8、执行超时的捕捉处理,示例代码如下:

  1. connection.query({sql: 'SELECT COUNT(*) AS count FROM big_table', timeout: 60000}, function (err, rows) {
  2. if (err && err.code === 'PROTOCOL_SEQUENCE_TIMEOUT') {
  3. throw new Error('too long to count table rows!');
  4. }
  5.  
  6. if (err) {
  7. throw err;
  8. }
  9.  
  10. console.log(rows[0].count + ' rows');
  11. });

9、同时可以对SQL错误代码的处理,示例代码如下:

  1. var connection = require('mysql').createConnection({
  2. port: 84943, // WRONG PORT
  3. });
  4.  
  5. connection.connect(function(err) {
  6. console.log(err.code); // 'ECONNREFUSED'
  7. console.log(err.fatal); // true
  8. });
  9.  
  10. connection.query('SELECT 1', function(err) {
  11. console.log(err.code); // 'ECONNREFUSED'
  12. console.log(err.fatal); // true
  13. });

最后,node mySQL提供强大的数据池群处理,以及SSL加密验证功能,在此不做说明,可查看具体API。

本文档参照API简略书写,如有错误,敬请原谅。

nodejs mysql 数据查询例子的更多相关文章

  1. Phantomjs+Nodejs+Mysql数据抓取(2.抓取图片)

    概要 这篇博客是在上一篇博客Phantomjs+Nodejs+Mysql数据抓取(1.抓取数据) http://blog.csdn.net/jokerkon/article/details/50868 ...

  2. mysql 数据查询全讲

    数据查询 涉及到DQL(Data Query Language)是sql语句的一类 本文全面介绍了mysql下 select 语句的各种查询方式:普通查询,模糊查询,查询排序,分页查询,聚合函数查询  ...

  3. MySQL数据查询之单表查询

    单表查询 简单查询 - 创建表 DROP TABLE IF EXISTS `person`; CREATE TABLE `person` ( `id` ) NOT NULL AUTO_INCREMEN ...

  4. MySQL - 数据查询 - 简单查询

    1. 简述 查询数据是指从数据库中获取所需要的数据.如Jack 要达到验证用户名和密码的目的,就需要从数据库已保存的用户表中读取当前用户的密码进行验证,以验明正身!保存查询数据是数据库操作中常用且重要 ...

  5. MySQL数据查询之多表查询

    多表查询 多表联合查询 #创建部门 CREATE TABLE IF NOT EXISTS dept ( did int not null auto_increment PRIMARY KEY, dna ...

  6. 笔记-4:mysql数据查询

    1.创建查询表 1.1 创建班级表 含义 字段名 数据类型 宽度 班级编号 classNo 字符型 6 班级名称 className 字符型 20 所属院系 department 字符型 30 年级 ...

  7. 【初学python】使用python连接mysql数据查询结果并显示

    因为测试工作经常需要与后台数据库进行数据比较和统计,所以采用python编写连接数据库脚本方便测试,提高工作效率,脚本如下(python连接mysql需要引入第三方库MySQLdb,百度下载安装) # ...

  8. Packets larger than max_allowed_packet are not allowed(mysql数据查询提示:不允许超过允许的最大数据包)解决方案

    问题背景: 首先我的项目运用的时Mysql,在做一个数据更新操作的时候,提示异常:System.Exception:“ExecuteNonQuery:Packets larger than max_a ...

  9. MySQL数据查询

    数据查询语言DQL select [all | distinct] 字段或表达式列表 [from子句] [where子句] [group by子句] [having子句] [order by子句] [ ...

随机推荐

  1. c# try-finally有什么用

     finally 代码块中的代码是 try-catch 结构执行完后无论有无异常发生都会执行的.finally 代码块中的代码是 try-catch 结构执行完后无论有无异常发生都会执行的.final ...

  2. linux zabbix监控服务器搭建

    搭建Zabbix监控服务器 准备运行环境(lamp) [root@zhuji1 ~]# yum -y install httpd [root@zhuji1 ~]# yum -y install php ...

  3. 利用Caffe训练模型(solver、deploy、train_val)+python使用已训练模型

    本文部分内容来源于CDA深度学习实战课堂,由唐宇迪老师授课 如果你企图用CPU来训练模型,那么你就疯了- 训练模型中,最耗时的因素是图像大小size,一般227*227用CPU来训练的话,训练1万次可 ...

  4. java注解之二

    从JDK5开始,Java增加了Annotation(注解),Annotation是代码里的特殊标记,这些标记可以在编译.类加载.运行时被读取,并执行相应的处理.通过使用Annotation,开发人员可 ...

  5. 解决 Cannot find OpenSSL's <evp.h> 和sasl.h not found!

    编译mongodb拓展出现 Cannot find OpenSSL's <evp.h> 解决方法:安装openssl yum install openssl openssl-devel 出 ...

  6. STM32 下的库函数和寄存器操作比较

    以 led闪烁中的flashLed函数例子: 库函数操作简单,但是效率不如寄存器操作的高: 寄存器操作很复杂,因为要熟悉上百个寄存器,但是程序效率很高 /**下面是通过直接操作库函数的方式实现IO控制 ...

  7. JBOD磁盘磁盘簇

    JBOD是存储领域中一类重要的存储设备. JBOD(Just a Bunch Of Disks,磁盘簇)是在一个底板上安装的带有多个磁盘驱动器的存储设备.通常又称为Span. 和RAID阵列不同,JB ...

  8. Regex 正则替换指定范围全部字符串

    1.正则替换字符-------------------------------------------------------------------------------------------- ...

  9. ONCOCNV软件思路分析之control处理

    进行数据初步处理(perl) 统计amplicon的RC(read counts),并且相互overlap大于75%的amplicon合并起来 统计每个amplicon的GC含量,均值, 性别识别并校 ...

  10. 动态链接库(DLL)

    DLL 的类型 当您在应用程序中加载 DLL 时,可以使用两种链接方法来调用导出的 DLL 函数.这两种链接方法是加载时动态链接和运行时动态链接. 加载时动态链接 在加载时动态链接中,应用程序像调用本 ...