文档章节

nodejs连接MySQL,做简单的CRUD

ubuntuvim
 ubuntuvim
发布于 2015/11/22 23:06
字数 877
阅读 421
收藏 7

原文链接:http://120.24.90.140:2368/nodejs-dowith-database/

参考网址

  nodejs是如此强大!!!直接操作数据库也非常简单、快……

使用实例

测试使用的数据库

SET NAMES utf8;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
--  Table structure for `user`
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(50) DEFAULT NULL,
  `timestamp` timestamp NULL DEFAULT NULL
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

-- ----------------------------
--  Records of `user`
-- ----------------------------
BEGIN;
INSERT INTO `user` VALUES ('1', 'ubuntuvim', '2015-11-22 17:50:30');
COMMIT;

SET FOREIGN_KEY_CHECKS = 1;

测试代码

获取数据库链接
/**
 * 后台服务,链接MySQL获取项目数据
 */
var mysql = require('mysql');  // 引入MySQL模块

var conn = mysql.createConnection({
	host: '127.0.0.1',
	user: 'root',
	password: '',
	// debug: true,
	debug: ['RowDataPacket'],
	database: 'todos'
});
使用连接池
//  使用连接池
var pool = mysql.createPool({
	host: '127.0.0.1',
	user: 'root',
	password: '',
	// debug: true,
	database: 'todos'
});
pool.getConnection(function(err, conn) {
	conn.query('select * from user', function(err, rows) {
		console.log('>>>>>>>>>>> 使用连接池 >>>>>>>>>>>>>>>>>');
		for (var i = 0; i < rows.length; i++) {
			console.log('rows[i].id = ' + rows[i].id);
			console.log('rows[i].username = ' + rows[i].username);
			console.log('rows[i].timestamp = ' + rows[i].timestamp);
		}
		conn.release();  //释放连接,放回到连接池

		//  甚至可以直接关闭连接池
		conn.destroy();
	});
});
查询所有数据
conn.connect();  //打开链接

conn.query('select * from user', function(err, rows, fields) {
	if (err) throw err;

	console.log('========= 查询所有数据 ===========');
	for (var i = 0; i < rows.length; i++) {
		console.log('rows[i].id = ' + rows[i].id);
		console.log('rows[i].username = ' + rows[i].username);
		console.log('rows[i].timestamp = ' + rows[i].timestamp);
	}
	// console.log('rows ' + rows[0].username);
	// console.log('fields ' + fields);
});

conn.end();  //关闭连接
多表关联查询
//  多表连接查询
var options = { sql: 'select * from user u, todoItem td where u.id = td.user', nestTables: '_' };
conn.connect();  //打开链接
conn.query(options, function(err, results) {
    if (err) throw err;

	console.log('---------------- 多表连接查询 -------------------');
	// console.log('results = ' + results);
	// console.log('results[0] = ' + results[0]);
	//  如果查询的时候使用nestTables: '_'分割属性名,那么查询也需要带表明前缀
	//  debug: ['RowDataPacket'] 连接时打开debug可以看到 打印的RowDataPacket信息
	console.log('results[0].username = ' + results[0].u_username);
});
conn.end();
查询某个字段值
//  根据属性查
conn.connect();  //打开数据库连接
//  与jdbc操作数据库类似,也可以使用占位符
conn.query('select username from user where id = ?', [1], function(err, results, fields) {
    if (err) throw err;

    console.log("-------------- 查询某个字段值 ----------------");
    for (var i = 0; i < results.length; i++) {
        console.log('username = ' + results[i].username);
    }

	//  field 包含的属性
	// [ { catalog: 'def',
	//     db: 'todos',
	//     table: 'user',
	//     orgTable: 'user',
	//     name: 'username',
	//     orgName: 'username',
	//     charsetNr: 33,
	//     length: 150,
	//     type: 253,
	//     flags: 0,
	//     decimals: 0,
	//     default: undefined,
	//     zeroFill: false,
	//     protocol41: true } ]
	//
	console.log("-------------- 字段名称----------");
	for (var i = 0; i < fields.length; i++) {
		console.log('fields = ' + fields[i].name);
	}

});
conn.end();  //关闭MySQL连接
插入数据
// 插入数据
console.log('------------- 插入数据 ------------');
conn.connect();  //打开连接
var user = { username: 'add test', timestamp: new Date() };
var query = conn.query('insert into user SET ?', user, function(err, result) {
	if (err) throw err;
	//  返回记录的id值
	console.log('result = ' + result.insertId);
});
// 执行的sql为:insert into user SET `username` = 'add test', `timestamp` = '2015-11-22 22:23:36.768'
// 注意与常规insert语句语法的区别
console.log('sql: ' + query.sql);  //  
conn.end();  //关闭连接
更新数据
console.log('------------- 更新数据 ------------');
conn.connect();  //打开连接
var data = [ 'update test', 4 ];  //需要跟占位符的顺序一致
var query = conn.query('UPDATE user SET username = ? where id = ?', data, function(err, result) {
	if (err) throw err;
	//  返回被更新的行数
	console.log('成功更新【' + result.changedRows + "】行数据。");
});
// 执行的sql为:UPDATE user SET username = 'update test' where id = 4
console.log('sql: ' + query.sql);  //  
conn.end();  //关闭连接
删除数据
console.log('------------- 删除数据 ------------');
conn.connect();  //打开连接
var data = [ 4 ];  //需要跟占位符的顺序一致
var query = conn.query('delete user where id = ?', data, function(err, result) {
	if (err) throw err;
	//  返回被更新的行数
	console.log('成功删除【' + result.affectedRows + "】行数据。");
});
// 执行的sql为:delete from user where id = 4
console.log('sql: ' + query.sql);  //  
conn.end();  //关闭连接

注意更新和删除获取的影响行数所使用的属性是不一样的。更新使用_changeRows_而删除使用_affectedRows_。

© 著作权归作者所有

ubuntuvim
粉丝 33
博文 76
码字总数 98477
作品 1
深圳
后端工程师
私信 提问
nodejs 连接Mysql相关操作的示例代码(orm)

上一篇博文写了nodejs 连接Mysql相关操作的示例代码,主要用到的是sql语句,都是比较基础的。这篇打算介绍一下nodejs的ORM操作,毕竟大型系统的开发还是需要用到ORM. nodejs里有不少的ORM框架...

Eric_HSBC
2013/09/28
4K
1
Pandora.js 专业的 Node.js 应用监控管理器,阿里开源

TLDR Github: http://github.com/midwayjs/pandora, 欢迎 PR、Issue 和 Star. Pandora.js 阿里巴巴产出的一个Node.js 应用监控管理器,可以让您对自己的 Node.js 应用了若指掌,我们的目标就...

big_allen
2018/02/23
4
0
nodejs 连接远程的 MySQL For Linux 时,总是返回 Connect: ETIMEOUT

这段时间想了解一下 NodeJS,于是就简单写了一个程序,后端连接一个内网,运行在 CentOS 7 上的 MySQL 5.7.20 的服务器,结果无论是使用 nodejs 组件 mysql, mysql2, 还是 Sequelize 都显示 ...

东胜神洲
2018/01/11
857
2
node.js 操作mysql数据库

nodeJS 操作 MySQL 在数据库(如例所示lzq)里建1张表(如例所示teachers)。 安装nodeJS版MySQL驱动: npm install mysql; 执行startSQL.js文件: node startSQL.js 测试环境: node.js 0.6...

hello_152
2012/03/23
823
2
在 Node.js 中使用 MySQL & MySQL JavaScript 客户端

NoSQL 数据库最近一段时间都是很受追捧的,也许已经是 Node.js 应用程序的首选后端了。不过,你不应该只是根据潮流来选择拿什么技术构建下一个项目,使用什么数据库类型要取决于项目的特定需...

达尔文
2017/07/26
3.6K
8

没有更多内容

加载失败,请刷新页面

加载更多

CQRS与AXON

CQRS 看了蛮多文章,只会CRUD,却不懂CQRS,CQRS是遵循DDD思想而产生的一种模式,Command and Query Responsibility Segregation 命令与查询隔离。查询就直接通过正常的模式service调dao层。...

无极之岚
34分钟前
4
0
OSChina 周三乱弹 —— 欢迎你来做产品经理

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @巴拉迪维 :10多次劲歌金曲获奖,更多叱咤歌坛排名,黎明才应该是四大天王之首,只可惜拍的电影太少。单曲循环一个多月的歌,力荐 《无名份的...

小小编辑
48分钟前
99
6
500行代码,教你用python写个微信飞机大战

这几天在重温微信小游戏的飞机大战,玩着玩着就在思考人生了,这飞机大战怎么就可以做的那么好,操作简单,简单上手。 帮助蹲厕族、YP族、饭圈女孩在无聊之余可以有一样东西让他们振作起来!...

上海小胖
今天
8
0
关于AsyncTask的onPostExcute方法是否会在Activity重建过程中调用的问题

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/XG1057415595/article/details/86774575 假设下面一种情况...

shzwork
今天
7
0
object 类中有哪些方法?

getClass(): 获取运行时类的对象 equals():判断其他对象是否与此对象相等 hashcode():返回该对象的哈希码值 toString():返回该对象的字符串表示 clone(): 创建并返此对象的一个副本 wait...

happywe
今天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部