nodejs mysql 数据查询例子

时间 2014-11-11 15:28:01  姜糖水原文  http://www.cnphp6.com/archives/59864

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[].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[]); // [{: }]   console.log(results[]); // [{: }] });

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: , // 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 操作数据库方法一详解的更多相关文章

  1. nodejs mysql 操作数据库方法二

    node.js 开发指南 – Node.js 连接 MySQL 并进行数据库操作 通常在NodeJS开发中我们经常涉及到操作数据库,尤其是 MySQL ,作为应用最为广泛的开源数据库则成为我们的首选, ...

  2. C#操作SQLite方法实例详解

    用 C# 访问 SQLite 入门(1) CC++C#SQLiteFirefox  用 C# 访问 SQLite 入门 (1) SQLite 在 VS C# 环境下的开发,网上已经有很多教程.我也是从 ...

  3. Net Core中数据库事务隔离详解——以Dapper和Mysql为例

    Net Core中数据库事务隔离详解--以Dapper和Mysql为例 事务隔离级别 准备工作 Read uncommitted 读未提交 Read committed 读取提交内容 Repeatab ...

  4. 重新学习MySQL数据库7:详解MyIsam与InnoDB引擎的锁实现

    重新学习Mysql数据库7:详解MyIsam与InnoDB引擎的锁实现 说到锁机制之前,先来看看Mysql的存储引擎,毕竟不同的引擎的锁机制也随着不同. 三类常见引擎: MyIsam :不支持事务,不 ...

  5. MySQL数据类型以及基本使用详解

    MySQL数据类型以及基本使用详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.MySQL服务器的主要组件 我们知道MySQL的主要组件主要是由服务端(mysqld)和客户端 ...

  6. 数据库开发-pymysql详解

    数据库开发-pymysql详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Python支持的MySQL驱动 1>.什么是驱动 与MySQL通信就是典型的CS模式.Se ...

  7. CentOS 6.3下Samba服务器的安装与配置方法(图文详解)

    这篇文章主要介绍了CentOS 6.3下Samba服务器的安装与配置方法(图文详解),需要的朋友可以参考下   一.简介  Samba是一个能让Linux系统应用Microsoft网络通讯协议的软件, ...

  8. mysql中event的用法详解

    一.基本概念mysql5.1版本开始引进event概念.event既“时间触发器”,与triggers的事件触发不同,event类似与linux crontab计划任务,用于时间触发.通过单独或调用存 ...

  9. ASP.NET连接Oracle数据库的步骤详解(转)

    ASP.NET连接Oracle数据库的步骤详解   本文我们主要介绍了ASP.NET连接Oracle数据库的步骤及每个步骤需要进行的设置,希望能够对您有所帮助.   在用ASP.NET开发应用程序时, ...

随机推荐

  1. 【BZOJ2064】分裂 状压DP

    [BZOJ2064]分裂 Description 背景:和久必分,分久必和...题目描述:中国历史上上分分和和次数非常多..通读中国历史的WJMZBMR表示毫无压力.同时经常搞OI的他把这个变成了一个 ...

  2. 《从零开始学Swift》学习笔记(Day 45)——重写方法

    原创文章,欢迎转载.转载请注明:关东升的博客 重写实例方法 在子类中重写从父类继承来的实例方法和静态方法.先介绍实例方法的重写. 下面看一个示例: class Person { var name: S ...

  3. E - I Hate It(基础线段树)

    E - I Hate It Time Limit:3000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Descr ...

  4. 九度OJ 1359:大魏树遍历 (树)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:299 解决:29 题目描述: 大魏是JOBDU技术组里最喜欢折腾的一个了,单反.骑车.改九度页面,当然还有YY prado.我们姑且先把这些 ...

  5. NoSQL 数据库分类 颠覆

    NoSQL 数据库分类 类型 部分代表特点 列存储 HbaseCassandraHypertable顾名思义,是按列存储数据的.最大的特点是方便存储结构化和半结构化数据,方便做数据压缩,对针对某一列或 ...

  6. lodash的使用

    Lodash是一个一致性.模块化.高性能的 JavaScript 实用工具库,内部封装了很多字符串.数组.对象等常见数据类型的处理函数. 为什么选择 Lodash ? Lodash 通过降低 arra ...

  7. MySQL将语句写入到binlog二进制日志中

    由于二进制日志是公共资源,所有线程都要写二进制日志,所以一定要避免两个线程同时更新二进制日志.因此,在事件组写二进制日志时,二进制日志将获得一个互斥锁LOCK_log,然后在事件组写完后释放,由于服务 ...

  8. Python lxml 使用

    lxml,是python中用来处理xml和html的功能最丰富和易用的库 from lxml import etree from lxml import html h = ''' <html&g ...

  9. MongoDB学习笔记—概念解析

    Mongo基本概念 下表将帮助您更容易理解Mongo中的一些概念: SQL术语/概念 MongoDB术语/概念 解释/说明 database database 数据库 table collection ...

  10. Python基础-re正则模块

    一.简介: 正则表达式:是一种小型的.高度专业化的编程语言,(在Python中)它内嵌在Python中,并通过re模块实现,正则表达式模式被编译成一系列的字节码,然后由用C编写的匹配引擎执行. 二.字 ...