【Node】Node的数据库编程

Node的MySQL驱动

Node.js的原生MySQL驱动库名为mysql。

MySQL2项目是原生MySQL驱动项目的升级版本,兼容mysql并支持其主要特性,提供新的特性:

  • 更快更好的性能
  • 预处理语句
  • 对编码和排序规则的扩展支持
  • Promise包装器
  • SSL与认证开关
  • 自定义流

安装MySQL2驱动(库名称为mysql2):
npm install mysql2

连接MySQL数据库

显示建立连接

  1. 导入mysql2模块
  2. 调用createConnection方法创建数据库的连接对象
  3. 调用connect方法连接数据库
  4. 调用query方法执行sql查询
const mysql = require('mysql2');

// 创建到数据库的连接
const connection = mysql.createConnection({
    host: 'localhost',
    port: 3306,
    user: 'root',
    password: '*****',
    database: 'deyun'
});

// 连接数据库
connection.connect(function (err) {
    if(err) {
        console.log('连接错误:'+err.stack);
        return;
    }
    console.log('连接ID:'+connection.threadId);
})

// 查询数据
connection.query('SELECT * FROM `admin`',function(err, results) {
    console.log(results); // 结果包括由MySQL服务器返回的行
});

隐式建立连接:

  1. 导入mysql2模块
  2. 调用createConnection方法创建数据库的连接对象
  3. 调用query方法执行sql查询
const mysql = require('mysql2');

// 创建到数据库的连接
const connection = mysql.createConnection({
    host: 'localhost',
    port: 3306,
    user: 'root',
    password: '*****',
    database: 'deyun'
});


// 查询数据
connection.query('SELECT * FROM `admin`',function(err, results) {
    console.log(results); // 结果包括由MySQL服务器返回的行
});

设置连接选项:

  • host:连接的数据库地址,默认为localhost
  • port:连接地址对应的端口,默认3306
  • user:用于连接的MySQL用户名
  • password:用户的密码
  • database:所需连接的数据库名称
  • charset:连接的编码形式(默认为utf8_general_ci),决定整理排序规则。
  • timezone:MySQL服务器上配置的时区(默认local)。
  • dateStrings:将强制日期类型(TIMESTAMP、DATETIME或DATE)作为字符串返回。
  • connectTimeout:设置连接时,返回失败前的未响应等待时间。

终止与MySQL的连接

  • 调用end方法
connection.end(function (err) {
    //终止连接
})
  • 调用destroy方法
    connection.destroy();

执行数据库的操作(CRUD):调用query方法

查询记录:

  • .query(sqlString,callback)
connection.query('select * from employee where id = 46',function(err,results,fields) {
    if(err) throw err;
    console.log('---查询结果---');
    console.log('查询结果:',results);
    console.log('查询结果字段:',fields);
})

在这里插入图片描述

var sqlString = "select * from employee where address = '桃花岛'"
connection.query(sqlString,function(err,results,fields) {
    if(err) {
        console.log(err);
        return;
    };
    console.log(results);
})
  • .query(sqlString,values,callback):参数values对应的是sqlString中的占位符?
var sqlString = "select * from employee where address = ?";
connection.query(sqlString,['桃花岛'],function(err,results,fields) {
    if(err) {
        console.log(err);
        return;
    };
    console.log(results);
})
  • .query(options,callback)
connection.query({
    sql: 'select * from employee where  address=?',
    values: '桃花岛'
},(err,result) => {
    if(err) {
        console.log(err);
        return;
    }
    console.log(result);
})
connection.query({
    sql: 'select * from employee where gender=? and address=?',
    values: ['女','桃花岛']
},(err,result) => {
    if(err) {
        console.log(err);
        return;
    }
    console.log(result);
})

增加记录:

var addSql = "insert into employee(name,gender,birthday,phone,address) values(?,?,?,?,?)";
var addSql_params = ['张三丰','男','1901-12-13','12345678988','武当山'];

connection.query({
    sql: addSql,
    values: addSql_params
},(err, result) => {
    if (err){
        console.log(err);
        return;
    }
    console.log('插入记录的id:'+result.insertId);
    console.log('插入结果:'+result);
})

修改记录:

var updateSql = "update employee set birthday=?,address=? where id=?";
var updateSql_params = ['1910-10-10','西安',35];

connection.query({
    sql: updateSql,
    values: updateSql_params
},(err, result) => {
    console.log('受影响的行数:'+result.affectedRows);
    console.log('改变的行数:'+result.changedRows);
})

删除记录:

var delSql = "delete from employee where id=?";
connection.query(delSql,39,(err, result) => {
    if (err){
        console.log(err);
        return;
    }
    console.log("删除的行数:"+result.affectedRows);
});

防止sql注入式攻击

  • 使用占位符?

  • 使用connection.escape([参数字段])对值进行转义

var sorter = 'date';   //这是一个列名
var sql    = 'SELECT * FROM posts ORDER BY ' + connection.escapeId(sorter);
connection.query(sql, function(err, results) {
  // ...
});

使用连接池

const mysql = require('mysql2');
//创建连接池
const pool = mysql.createPool({   
	host: 'localhost',
	user: 'root',
	password: 'abc123',
	database: 'testmydb',
	waitForConnections: true,
	connectionLimit: 10,
	queueLimit: 0
});
//使用连接池
pool.query('SELECT * FROM 'bookinfo' ', function (err, results, fields) {
    console.log('查询结果:',results);     
});
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Node-RED是一个基于流程的可视化编程工具,可以通过简单的拖放操作来构建物联网应用和自动化流程。在Node-RED中数据库,我们可以使用一些节点来实现。 首先,我们需要安装数据库相关的节点。在Node-RED的管理界面中,点击右上角菜单图标,选择Manage Palette。在Palette Manager窗口中,选择“Install”选项卡,然后在搜索框中输入相关关键词,如“MySQL”或“MongoDB”等,然后点击Install按钮来安装相应的数据库节点。 安装完成后,我们就可以在Node-RED的左侧工具栏中找到已安装的数据库节点。对于MySQL数据库,我们可以使用“node-red-contrib-mysql”节点,对于MongoDB数据库,我们可以使用“node-red-contrib-mongodb3”节点。 在流程中使用数据库节点时,我们首先需要配置数据库的连接信息,包括主机地址、端口号、数据库名称、登录凭据等。配置完成后,我们就可以在流程中使用数据库节点了。 例如,对于MySQL数据库,我们可以使用“mysql”节点来执行SQL查询语句。我们可以将其他节点的输出结果连接到“mysql”节点的输入端口,然后在节点的属性中设置要执行的SQL语句。执行完SQL查询后,查询结果将作为消息传递给下一个节点进行处理。 对于MongoDB数据库,我们可以使用“mongodb in”节点来执行读取操作,使用“mongodb out”节点来执行入操作。这两个节点的使用方式类似于“mysql”节点,我们可以将其他节点的输出结果连接到“mongodb out”节点的输入端口,然后在节点的属性中设置要入的数据。 总的来说,Node-RED提供了丰富的数据库节点,使得我们可以很方便地将数据入到数据库中。根据具体的数据库类型和需求,我们选择合适的节点来配置和使用,实现数据的存储和读取。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

南栀~zmt

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值