阅读目录

一:连接数据库

const mysql = require('mysql');
/*
createConnection方法创建一个表示与Mysql数据库服务器之间连接的 Connection对象
*/
const connection = mysql.createConnection({
host: 'localhost',
port: 3306,
database: 'my_db',
user: 'root',
password: '123456'
});
/*
connection 对象被创建之后,可以使用该对象的 connect方法建立mysql数据库服务器之间的连接
*/
connection.connect((err) => {
if (err) {
console.log('数据库连接失败');
} else {
console.log('数据库连接成功');
/*
在不需要使用该数据库的时候,可以使用 Connection对象的end方法或destory方法关闭数据库之间的连接
*/
connection.end((err1) => {
if (err1) {
console.log('关闭数据库操作失败');
} else {
console.log('关闭数据库操作成功');
}
})
}
});

上面的代码保存到 app.js, 然后在命令行中运行 node app.js 即可看到如下连接成功的信息,如下图所示:

2.1 数据库新增和查询数据

在mysql模块中,可以通过Connection对象的query方法统一执行数据的增加、删除、查询和修改等基本处理。基本方法如下:

connection.query(sql, [parameters], [callback]);

sql参数:必填参数,该值为一个字符串,用于指定需要用来执行的SQL表达式。
parameters:可选参数,该值为一个数组或一个对象。用于存放sql参数值字符串中使用到的所有参数值。
callback: 该参数为一个函数,用于指定执行数据的增加、删除、查询及修改操作结束时所需执行的回调函数。

一般是如下方法:

function (err, res) {

}

err参数指操作结果的时候错误对象。
res参数值为一个对象,代表操作从执行结果。

为了防止SQL注入攻击,需要使用Connection对象的escape方法对所有用户输入数据进行 escape编码处理,该方法使用如下所示:

connection.escape(data);

下面我们来实现数据库新增和查询操作。在新增操作之前,我们来看下我们的 my_db数据库中的User表中目前有哪些数据,如下所示:

下面是新增和查询数据的代码如下:

const mysql = require('mysql');
/*
createConnection方法创建一个表示与Mysql数据库服务器之间连接的 Connection对象
*/
const connection = mysql.createConnection({
host: 'localhost',
port: 3306,
database: 'my_db',
user: 'root',
password: '123456'
}); /*
connection 对象被创建之后,可以使用该对象的 connect方法建立mysql数据库服务器之间的连接
*/
connection.connect((err) => {
if (err) {
console.log('数据库连接失败');
} else {
console.log('数据库连接成功');
// 执行sql新增数据操作
connection.query('INSERT INTO User SET ?', {
UserName: 'aaa',
Password: '123456789'
}, (err, res) => {
if (err) {
console.log(err);
console.log('插入数据失败');
} else {
console.log('插入数据成功,我接着再查询一遍');
connection.query('SELECT * FROM ??', ['User'], (err1, res) => {
console.log(err1)
if (err1) {
console.log('查询数据失败');
} else {
console.log(res);
}
})
}
})
}
});

然后我们执行结果可以看到打印如下信息:

注意:如果代码中有这句代码的话 connection.end(); 在查询的时候会报错,比如查询有这句代码的时候,如下代码:

connection.query('SELECT * FROM ??', ['User'], (err1, res) => {
console.log(err1)
if (err1) {
console.log('查询数据失败');
} else {
console.log(res);
connection.end(); // 有这句代码的时候,查询的时候会报错;需要把这句代码删除掉
}
})

报错信息是如下:Error: Cannot enqueue Query after invoking quit.

如下图所示:

但是如果我们插入的数据是中文的话,也会报错的,保存信息如下:

ER_TRUNCATED_WRONG_VALUE_FOR_FIELD: Incorrect string value

这是因为中文字符编码的问题,具体解决办法可以看这篇文章.

2.2 获取该数据的主键值

在一个具有自增主键字段的数据表中插入一条数据后,我们可以在回调函数中使用 res参数值对象的 insertId属性值获取该数据的主键值。如下代码所示:

const mysql = require('mysql');
/*
createConnection方法创建一个表示与Mysql数据库服务器之间连接的 Connection对象
*/
const connection = mysql.createConnection({
host: 'localhost',
port: 3306,
database: 'new_my_db',
user: 'root',
password: '123456'
}); /*
connection 对象被创建之后,可以使用该对象的 connect方法建立mysql数据库服务器之间的连接
*/
connection.connect((err) => {
if (err) {
console.log(err);
console.log('数据库连接失败');
} else {
console.log('数据库连接成功');
// 执行sql新增数据操作
connection.query('INSERT INTO User SET ?', {
UserName: '我是空智',
Password: '123456789'
}, (err, res) => {
if (err) {
console.log(err);
console.log('插入数据失败');
} else {
console.log('插入数据成功,我接着再查询一遍');
console.log('插入数据的ID值为 %d', res.insertId);
}
})
}
});

如下图所示:

2.3 多语句查询

基于安全原因,在mysql模块中,默认是禁止使用多语句查询。因为如果我们开发者没有对用户输入数据进行escape编码处理的话,应用程序很有可能受到SQL注入攻击。如果我们需要支持多语句查询功能的话,可以将 createConnection方法所使用的options参数值对象中的multipleStatements属性值设置为true即可。如下代码所示:

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

下面我们来做一个demo,首先我们向数据库 new_my_db中table中同时插入三条数据,插入数据成功后修改第一条数据,修改完成后我们再删除第三条数据,删除数据成功后,我们再触发查询操作,查询所有的数据。如下代码所示:

const mysql = require('mysql');
/*
createConnection方法创建一个表示与Mysql数据库服务器之间连接的 Connection对象
*/
const connection = mysql.createConnection({
host: 'localhost',
port: 3306,
database: 'new_my_db',
user: 'root',
password: '123456',
multipleStatements: true
}); /*
connection 对象被创建之后,可以使用该对象的 connect方法建立mysql数据库服务器之间的连接
*/
connection.connect((err) => {
if (err) {
console.log(err);
console.log('数据库连接失败');
} else {
console.log('数据库连接成功');
// 执行sql新增数据操作
insertData();
}
});
// 插入数据
function insertData() {
var sqlStr = '';
for (var i = 0; i < 3; i++) {
sqlStr += "INSERT INTO " + 'User' + "(UserName, Password) \
values("+ connection.escape(" 用户名 " + i.toString())+", " +
connection.escape(" 姓" + i.toString()) + ");";
connection.query(sqlStr, (err, res) => {
if (err) {
console.log('插入数据失败');
} else {
console.log('插入数据成功');
updateData();
}
});
}
} // 更新数据
function updateData() {
connection.query("update " + 'User' + " Set Password = ? where UserName=?", [" 姓100", '用户名1'], (err, res) => {
if (err) {
console.log('更新数据失败.');
} else {
console.log('更新数据成功');
deleteData();
}
})
} // 删除数据
function deleteData() {
connection.query("delete from " + 'User' + " where UserName=?", [' 用户名2 '], (err, res) => {
if (err) {
console.log('删除数据失败');
} else {
console.log('删除数据成功');
// 查询数据
queryData();
}
});
} // 查询数据
function queryData() {
connection.query("SELECT * FROM " + 'User', (err, res) => {
if (err) {
console.log('查询数据失败');
} else {
console.log('查询数据成功');
console.log(res);
}
});
}

如下图所示:

MySql数据库在NodeJS中简单的基本操作的更多相关文章

  1. MySQL数据库的环境及简单操作

    ***********************************************声明*************************************************** ...

  2. MySQL数据库执行计划(简单版)

    +++++++++++++++++++++++++++++++++++++++++++标题:MySQL数据库执行计划简单版时间:2019年2月25日内容:MySQL数据库执行计划简单版重点:MySQL ...

  3. MySQL数据库的基本使用简单易懂

    MySQL数据库的基本使用 一.数据库概述 1. 基本介绍 数据库就是以一定格式进行组织的数据的集合.通俗来看数据库就是用户计算机上 一些具有特殊格式的数据文件的集合 2. 数据库的特点 持久化存储 ...

  4. 安卓版php服务器的mysql数据库增删改查简单案例

    界面: index.php文件: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "h ...

  5. MySQL数据库单例连接简单实现(MySQL扩展)

    <?php /** * MySQL数据库单例实现 * * @author shizq at 2015-04-22 * */ final class MySQLFactory { private ...

  6. Spring Boot项目中MyBatis连接DB2和MySQL数据库返回结果中一些字符消失——debug笔记

    写这篇记录的原因是因为我之前在Spring Boot项目中通过MyBatis连接DB2返回的结果中存在一些字段, 这些字段的元素中缺少了一些符号,所以我现在通过在自己的电脑上通过MyBatis连接DB ...

  7. mysql数据库binary log中的事件到底是什么?

    需求描述: 最近看mysql备份恢复的时候,基于时间点恢复,提到了binary log中存的是"事件" 那么到底什么是事件呢 概念解释: binary log中存的是事件(even ...

  8. 面试题: mysql数据库 已看1 简单的sql练习

    数据库总结--MySQL常见面试题 2015年03月24日 17:56:06 阅读数:7787 1.根据部门号从高到低,工资从低到高列出员工的信息 select * from employee ord ...

  9. MySql数据库在表中添加新字段,设置主键,设置外键,字段移动位置,以及修改数据库后如何进行部署和维护的总结

    1,为当前已有的表添加新的字段 alter table student add studentName varchar(20) not null; 2,为当前已有的表中的字段设置为主键自增 alter ...

随机推荐

  1. 精读《useEffect 完全指南》

    1. 引言 工具型文章要跳读,而文学经典就要反复研读.如果说 React 0.14 版本带来的各种生命周期可以类比到工具型文章,那么 16.7 带来的 Hooks 就要像文学经典一样反复研读. Hoo ...

  2. Hbase王国游记之:Hbase客户端API初体验

    §历史回顾 2018年岁末,李大胖朦胧中上了开往Hbase王国的车,伴着一声长鸣,列出缓缓驶出站台,奔向无垠的广袤. (图片来自于网络) 如不熟悉剧情的,可观看文章: 五分钟轻松了解Hbase列式存储 ...

  3. QQ音乐的动效歌词是如何实践的?

    本文由云+社区发表 作者:QQ音乐技术团队 一. 背景 1. 现状 歌词浏览已经成为音乐app的标配,展示和动画效果也基本上大同小异,主要是单行的逐字染色的卡拉OK效果和多行的滚动效果.当然,我们也不 ...

  4. 我永远爱着OOP——第二单元作业总结

    第二单元的电梯真是愉♂快呢,多线程编程作为java编程OOP中的重要组成部分,通过这一个单元的学习,我也是有了很多全新的认识 那么下面就先例行一下公事 三次作业分析 第五次作业 设计分析 实现的电梯是 ...

  5. vue安装element-ui和px2rem的细节

    1.按需引入element-ui vue脚手架搭建完成之后,可以到element-ui官网进行npm 安装: npm i element-ui -S 如果是完整引入可以按照官网一步一步做即可完成:这里 ...

  6. windows相关命令记录

    1.regedit 打开注册表 2.services.msc 打开服务列表 3.net start/stop 服务名 打开/关闭服务,例:net start mysql57,可以通过服务列表开启/关闭 ...

  7. wepy框架自定义组件编译报错not Found File XXX.wxss

    今天在自己写wepy框架组件的时候编译后报错not Found File XXX.wxss 我去,当时我很难受啊,调用组件时结构和逻辑都正常,一写样式就原地爆炸 解决之路:1.先打开编译后的dist文 ...

  8. 【代码笔记】Web-CSS-CSS background背景

    一,效果图. 二,代码. <!DOCTYPE html> <html> <head> <meta charset="utf-8"> ...

  9. 在OQL上使用UPDLOCK锁定查询结果,安全的更新实体数据

    SqlServer查询记录的时候提供多种锁定方式,其中UPDLOCK 的优点是允许您读取数据(不阻塞其它事务)并在以后更新数据,同时确保自从上次读取数据后数据没有被更改.当我们用UPDLOCK来读取记 ...

  10. Android为TV端助力 MediaPlayer 错误代码(error code)总结 转载

    public static final int MEDIA_ERROR_IO Added in API level 17 File or network related operation error ...