node.js连接数据库基本操作、封装数据库操作,输出到网页
声明:以下代码测试通过,不同于直接的复制粘贴乱七八糟未测试的代码,完全可以用,最后会附上所有的代码和sql文件
首先建立表,建表语句如下:
/*
SQLyog Ultimate v12.08 (64 bit)
MySQL - 5.7.17-log : Database - test
*********************************************************************
*/ /*!40101 SET NAMES utf8 */; /*!40101 SET SQL_MODE=''*/; /*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
CREATE DATABASE /*!32312 IF NOT EXISTS*/`test` /*!40100 DEFAULT CHARACTER SET latin1 */; USE `test`; /*Table structure for table `websites` */ DROP TABLE IF EXISTS `websites`; CREATE TABLE `websites` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`name` CHAR(20) NOT NULL DEFAULT '' COMMENT '站点名称',
`url` VARCHAR(255) NOT NULL DEFAULT '',
`alexa` INT(11) NOT NULL DEFAULT '' COMMENT 'Alexa 排名',
`country` CHAR(10) NOT NULL DEFAULT '' COMMENT '国家',
PRIMARY KEY (`id`)
) ENGINE=INNODB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8; /*Data for the table `websites` */ INSERT INTO `websites`(`id`,`name`,`url`,`alexa`,`country`) VALUES (1,'Google','https://www.google.cm/',1,'USA'),(2,'淘宝','https://www.taobao.com/',13,'CN'),(3,'汪政','https://www.google-api.ac.cn',4689,'CN'),(4,'微博','http://weibo.com/',20,'CN'),(5,'Facebook','https://www.facebook.com/',3,'USA'); /*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
下面是数据库表的结构:

然后随便打开一个写代码的工具,建立(我的是Hbuilder,其他的原理相同),我的目录结构如下:

第一步:安装你需要安装mysql,或者使用云Mysql也可以
第二步:npm install mysql
下面就是具体的代码了:
查询数据
/**
* node.js 操作数据库之查询数据
*/
const mysql = require('mysql'); let connection = mysql.createConnection({
host: 'localhost',
user: 'root',
password: 'root',
port: '3306',
database: 'test'
}); connection.connect(); let sql = 'SELECT id,name,url,alexa,country FROM websites';
//查
connection.query(sql, function(err, result) {
if(err) {
console.log('[SELECT ERROR] - ', err.message);
return;
} console.log('--------------------------SELECT----------------------------');
console.log(result);
console.log('------------------------------------------------------------\n\n');
}); connection.end();
添加数据
/**
* node.js 操作数据库之添加数据
*/
const mysql = require('mysql'); let connection = mysql.createConnection({
host: 'localhost',
user: 'root',
password: 'root',
port: '3306',
database: 'test'
}); connection.connect(); let addSql = 'INSERT INTO websites(id,name,url,alexa,country) VALUES(0,?,?,?,?)';
let addSqlParams = ['汪政', 'https://www.baidu.com','23453', 'CN'];
connection.query(addSql, addSqlParams, function(err, result) {
if(err) {
console.log('[INSERT ERROR] - ', err.message);
return;
}
console.log('--------------------------INSERT----------------------------');
console.log('INSERT ID:', result);
console.log('-----------------------------------------------------------------\n\n');
});
connection.end();
删除数据
/**
* node.js 操作数据库之删除数据
*/
const mysql = require('mysql'); let connection = mysql.createConnection({
host: 'localhost',
user: 'root',
password: 'root',
port: '3306',
database: 'test'
}); connection.connect(); let delSql = 'DELETE FROM websites where id = 7';
//删
connection.query(delSql, function(err, result) {
if(err) {
console.log('[DELETE ERROR] - ', err.message);
return;
} console.log('--------------------------DELETE----------------------------');
console.log('DELETE affectedRows', result.affectedRows);
console.log('-----------------------------------------------------------------\n\n');
}); connection.end();
修改数据
/**
* node.js 操作数据库之修改数据
*/
const mysql = require('mysql'); let connection = mysql.createConnection({
host: 'localhost',
user: 'root',
password: 'root',
port: '3306',
database: 'test'
}); connection.connect(); let modSql = 'UPDATE websites SET name = ?,url = ? WHERE name = ?';
let modSqlParams = ['汪政', 'https://www.google-api.ac.cn', '汪政1'];
//改
connection.query(modSql, modSqlParams, function(err, result) {
if(err) {
console.log('[UPDATE ERROR] - ', err.message);
return;
}
console.log('--------------------------UPDATE----------------------------');
console.log('UPDATE affectedRows', result.affectedRows);
console.log('-----------------------------------------------------------------\n\n');
}); connection.end();
接下来就是封装MySQL的操作了(简化写代码,需要自己写SQL)
首先建立 db.js 文件,这个是数据库的具体信息,代码如下:
// 配置链接数据库参数
module.exports = {
host: 'localhost',
port: 3306, // 端口号
database: 'test', // 数据库名
user: 'root', // 数据库用户名
password: 'root' // 数据库密码
};
接着建立 dbhelper.js 文件(由于之前写java遗留下来的命名习惯...),代码如下:
const mysql = require('mysql'); // 引入mysql模块
const databaseConfig = require('./db'); // 引入数据库配置模块中的数据
// 向外暴露方法
module.exports = {
query: function(sql, params, callback) {
// 每次使用的时候需要创建链接,数据操作完成之后要关闭连接
let connection = mysql.createConnection(databaseConfig);
connection.connect(function(err) {
if(err) {
console.log('数据库链接失败');
throw err;
}
// 开始数据操作
// 传入三个参数,第一个参数sql语句,第二个参数sql语句中需要的数据,第三个参数回调函数
connection.query(sql, params, function(err, results, fields) {
if(err) {
console.log('数据操作失败');
throw err;
}
// 将查询出来的数据返回给回调函数
callback && callback(results, fields);
// results作为数据操作后的结果,fields作为数据库连接的一些字段
// 停止链接数据库,必须再查询语句后,要不然一调用这个方法,就直接停止链接,数据操作就会失败
connection.end(function(err) {
if(err) {
console.log('关闭数据库连接失败!');
throw err;
}
});
});
});
}
};
接下来我们建立测试用的 test.js 文件,测试封装的语句有没有问题:
const db = require('./dbhelper');
// 查询实例
db.query('SELECT id,name,url,alexa,country FROM websites', [], function(result, fields) {
console.log('查询结果:');
console.log(result);
});
////添加实例
//var addSql = 'INSERT INTO websites(id,name,url,alexa,country) VALUES(0,?,?,?,?)';
//var addSqlParams = ['汪政', 'https://www.baidu.com','23453', 'CN'];
//db.query(addSql, addSqlParams, function(result, fields) {
// console.log('添加成功')
//})
最后建立 test_web.js 文件 ,测试时候可以把数据输入到网页端,或者给别人调用:
const db = require('./dbhelper');
let express = require('express');
let app = express();
let arr = [];
// 查询实例
db.query('SELECT id,name,url,alexa,country FROM websites', [], function(result, fields) {
app.get('/select', function(req, res) {
res.send(result);
});
});
app.listen(3000);
结语:SQL语句,不要使用 * ,var let const 的用法这里不做阐述,一般都用var也是可以的,没必要分的那么清,强迫症的除外。最后的显示在网页端的,我只写了查询的,其实增删改查就是那样。其他的使用get或者post方法,传输参数就可以。时间有限,就不写多多于的呢。希望能帮到大家。
下载链接:https://share.weiyun.com/57CHAJg (腾讯微云,直接就可以下载)
node.js连接数据库基本操作、封装数据库操作,输出到网页的更多相关文章
- Node.js文件系统、路径的操作详解
17173 17173 2 75 2014-12-12T05:06:00Z 2014-12-12T05:06:00Z 21 2735 15595 www.17173.com 129 36 18294 ...
- Node.js文件系统、路径的操作函数
Node.js文件系统.路径的操作函数 目录 Node.js文件系统.路径的操作函数 1.读取文件readFile函数 2.写文件 3.以追加方式写文件 4.打开文件 5.读文件,读取打开的文件内容到 ...
- Node.js连接数据库
Node.js连接数据库前,须要安装对应的包.假设安装sql server 须要先装包node-sqlserver. 我们以mysql为案例来说明node.js查询mysql数据. 1.安装 node ...
- node.js + mssql 简易封装操作
时间吧,总是这么凑巧,在我学习[node.js]还没几天,我的 Microsoft SQL Server Management Studio 18 就歇菜了,至于怎么歇菜的吧....它可能的意思就是想 ...
- MongDB系列(一):使用node.js连接数据库
1.首先启动mongodb数据库服务器 2.创建app.js,代码如下: /** * Created by byzy on 2016/8/18. * node.js 连接 mongodb实例 */ / ...
- Node.js连接数据库取值,简单接口的实现
第一步:先安装Node.js,这里不做介绍 第二步:新建一个文件夹,打开cmd,进入该文件夹 执行npm init命令生成page.json文件 第三步:安装如下模块,打开cmd,进入第二步的文件夹, ...
- node js实战:带数据库,加密的注册登录表单
demo 注册效果: 登陆效果: 数据库截图: 数据库操作 db.js //这个模块里面封装了所有对数据库的常用操作 var MongoClient = require('mongodb ...
- Node.js 手册查询-2-MongoDB数据库方法
MongoDb 标签(空格分隔): 数据库 MongoDb 安装 当前版本 2.X 解压至任意目录,最好不要是c盘. 在根目录下建立一个文件夹用来存储工程 我的例子: 安装至: d:\mongodb ...
- Node.js系列文章:利用console输出日志文件
通常我们在写Node.js程序时,都习惯使用console.log打印日志信息,但这也仅限于控制台输出,有时候我们需要将信息输出到日志文件中,实际上利用console也可以达到这个目的的,今天就来简单 ...
随机推荐
- IIS之虚拟目录学习
从刚实习开始就了解到虚拟目录这个词,但是一直没去研究过什么意思,而且也没实际用过.一晃两年过去了,今天正好趁休息,补补脑学习下. 通过百度了解到,虚拟目录创建的目的是为了应对磁盘容量爆满,部署的网站不 ...
- PHP的错误处理和异常处理
由于教程是围绕着文件打开做的错误处理,所以先记录几个用于文件处理的一些函数,fopen 用于打开一个文件:file_exists 用于检查目录是否存在:fclose( $变量 )用于指定关闭打开的文件 ...
- UWP 读取XML文件
一.读取本地XML文件时要将xxx.xml文件的“生成操作”改为“嵌入的资源”会比较好,在手机上运行的话需要改为“内容” <?xml version="1.0" encodi ...
- oracle导入导出操作
1,获取oracle导入导出帮助: imp help=y 2,导出命令 exp 用户名/密码@数据库实例 file=文件路径名 如: exp sys/password@orcl file=d:\dat ...
- POSIX Threads
POSIX Threads, usually referred to as pthreads, is an execution model that exists independently from ...
- 优动漫PAINT中设置横排文字
初次启动优动漫PAINT使用文本工具时,软件默认是直排文字效果,如果您想更改为横排文字,或者切换横排竖排文本,如何设置,本文做简单介绍. 在工具箱中单击“文本工具”. 在绘图页面的任意位置单击鼠标,输 ...
- 大数据之R语言速成与实战
什么是R语言? R语言由新西兰奥克兰大学的Ross Ihaka和Robert Gentleman两人共同发明.其词法和语法分别源自Scheme和S语言. R定义:一个能够自有有效的用于统计计算和绘图的 ...
- HDU 4458 Shoot the Airplane( 判断点在多边形内外 )
链接:传送门 题意:这个游戏是一个2D打飞机游戏,飞机以速度 v 水平飞行,它是一个简单的多边形,玩家从( 0 , 0 )向上射击,子弹有一个出速度 b ,子弹可以看作一个点,打中飞机边缘是无法击落飞 ...
- Myeclipse关闭JS等文件的验证
点击 window > 右键单击properties,弹出properties界面 然后选择MyEclipse->validation->Excluded Resource下找到不需 ...
- bitset优化背包
题目:https://agc020.contest.atcoder.jp/tasks/agc020_c 回忆下一题,是零一背包,主要的做法就是凑出最接近sum/2的价值,然后发现现在的背包的容量是20 ...