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简略书写,如有错误,敬请原谅。

时间: 2024-11-10 00:06:57

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

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

概要 这篇博客是在上一篇博客Phantomjs+Nodejs+Mysql数据抓取(1.抓取数据) http://blog.csdn.net/jokerkon/article/details/50868880 后进行的第二部分,请各位读者在看这篇博客之前先浏览上一篇,因为这里面有部分代码会沿用到上一部分的抓取结果. 好,现在开始正式的抓取图片的讲解 首先,我们先来看看代码: var page =require('webpage').create(); var address='http://pro

Windows中使用MySQL 数据查询(三)

一.排序 select * from employees order by name; 字符型默认字符顺序(也就是说z永远比a大),不管大小写:如果想按编码值排序(也就是说小写永远大于大写),则使用 select * from employees order by binary name; 二.取前n条记录(n在本例中为3) select * from employees order by id limit 3; 三.日期时间函数 1.获取当前日期 select curdate(); 2.取年

MySQL数据查询入门

数据查询就是对于数据表中现有的数据进行逐行筛选的工作.满足查询条件的数据被提取出来,形成记录集.类似表的结构.在记录集上可以再次查询. SELECT命令是使用频率最高的SQL语句.SELECT语句中含有大量子句,用来完成不同的查询功能. SELECT * from 表名字; 全表查询. *代表所有字段 //一般不用通配符  * SELECT  字段1,字段2.......  from 表名字;  //选择字段查询 别名 SELECT  字段1 as 别名1,字段2 as 别名2.......  

mysql数据查询基础

数据查询 select * from 表名  //*号查看表中所有数据 select 字段 from 表名    //查看指定的字段 排序 使用order by 字句查询,比如对学生年龄进行排序,年龄用(age)表示: select age from 表名 order by age asc              //asc表示升序排列 select age from 表名 order by age desc            //desc表示降序排列 原文地址:https://www.c

Mysql数据查询练习题一

设计一个系统,保存乒乓球联赛的比赛信息! 要求:在mysql命令行输出如下信息: 1. 创建一个数据库(本例以ginvip数据库为例) create database ginvip; 2.  创建队员信息表 create table player ( id int unsigned primary key auto_increment, player_name varchar(20) default '', gender enum('male','female','secret') ); 在pl

Mysql 数据查询语句中between and 是包含边界值的

MySQL的sql语句中可以使用between来限定一个数据的范围,例如: select * from user where userId between 5 and 7; 查询userId为5.6,7的user,userId范围是包含边界值的,也等同如下查询: select * from user where userId >= 5 and userId <= 7; 很多地方都提到between是给定的范围是大于等第一值,小于第二个值,其实这是不对的.此前我一直也是这么认为,通过实验,结论是

MySQL数据查询

要点概论 1. SELECT语句的语法 2. 简单查询 3. 连接查询 4.联合查询 5. 子查询 6. 正则表达式查询 7. 通过正则表达式查询数据 1. SELECT 语句的语法 http://www.cnblogs.com/HZY258/p/8496391.html 2. 简单查询 2.1 获取所有列 SELECT * FROM table_name; 如果数据表中的列较少,也可以通过列出所有列名的方式获取数据. 2.2 获取指定列 SELECT 列名列表 FROM table_name;

20180813 mysql 数据查询

数据查询语言DQL select [all | distinct] 字段或表达式列表 [from子句] [where子句] [group by子句] [having子句] [order by子句] [limit子句]: where中可用的运算符: 算术运算符: +  -  *  /   % 比较运算符: >   >=   <    <=   =(等于)   <>(不等于) ==(等于,mysql扩展),!=(不等于,mysql扩展) 逻辑运算符: and(与)  or(

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

概要: 这篇博文主要讲一下如何使用Phantomjs进行数据抓取,这里面抓的网站是太平洋电脑网估价的内容.主要是对电脑笔记本以及他们的属性进行抓取,然后在使用nodejs进行下载图片和插入数据库操作. 先进行所有页面的内容进行抓取 var page =require('webpage').create(); var address='http://product.pconline.com.cn/server/'; var fs = require('fs'); var mypath = 'ver