数据库的增删改查
步骤:
-
安装mysql数据库模块 npm i mysql
-
引入模块
-
创建连接配置
-
建立连接
-
执行sql语句并返回结果
-
关闭数据库连接
// 1. 引入mysql模块
let mysql = require('mysql');
// 2. 创建连接配置
const conn = mysql.createConnection({
host:'localhost',
user:'root',
password:'',
database:'qtummatrix'
})
// 3. 建立连接
conn.connect();
// 4. 准备sql语句
// let sql = 'select * from student'; 查询语句
// let sql = 'insert into student values(null,"冉祎航",20,1,"计算机",2)'
// let sql = 'update student set age = 30 where id = 31'
// let sql = 'delete from student where id = 31'
// 5. 执行sql语句
conn.query(sql,(err,res)=>{
if(err){
return err;
}
console.log(res);
})
// 6. 结束连接;如果不再有sql被执行,一定要关闭连接,否则会一直占用资源
conn.end();
/*
对于增删改查而言,只有查询的语句,返回值是一个数据,包含所有查询结果,每一条记录是一条数据;
其他的返回的都是对象,affectRows表示受影响的行数,一般情况下通过该字段判断增删改的结果
*/
注意:
实现mysql数据库的注册功能
register.html页面
<h1>注册页面</h1>
<form action="http://127.0.0.1:3000/register" method="post">
用户名:<input type="text" name="uname"><br/>
密码:<input type="password" name="pwd" id="pwd"><br/>
确认密码:<input type="password" name="repwd" id="repwd"><br/>
<input type="submit" id='btn'>
<input type="reset">
</form>
</body>
<script>
let btn = document.querySelector('#btn');
let pwd = document.querySelector('#pwd');
let repwd = document.querySelector('#repwd');
btn.onclick = function(){
if(pwd.value != repwd.value){
console.log('两次密码不一致!');
return false;
}
}
</script>
index.js 处理请求和数据页面
// 引入模块
let http = require('http');
let fs = require('fs');
let mysql = require('mysql');
const url = require("url");
// 创建http服务器环境
var serve = http.createServer(function(req,res){
res.setHeader('Content-Type','text/html;charset=utf-8')
// 判断地址为favicon
if(req.url == '/favicon.ico'){
res.end('');
return
}else if(req.url == '/index'){ // 注册界面
fs.readFile('./register.html','utf-8',(err,data)=>{
if(err){
res.end('文件读取失败,请稍后重试!');
return;
}
res.end(data);
});
}else if(req.url == '/register'){ // 点击注册按钮
console.log('demo');
// 获取传递过来的参数
let body = '';
req.on('data',chunk=>{
body += chunk;
})
req.on('end',()=>{
let parms = new URLSearchParams(body);
console.log(parms);
// 1. 配置数据库信息
let conn = mysql.createConnection({
host:'localhost',
database:'qtummatrix',
user:'root',
password:''
})
// 2. 连接
conn.connect();
// 3. 准备sql语句
let sql = `insert into user(name,pwd) values(${parms.get('uname')},${parms.get('pwd')})`;
// console.log(sql);
// 4. 执行sql语句
conn.query(sql,(err,data)=>{
if(err){
res.end('服务器内部错误!');
return;
}
if(data.affectedRows > 0){
res.end('注册成功了');
}
})
})
}
});
// 监听端口
serve.listen(3000,res=>{
console.log('端口号3000');
})
注意:数据库连接:频繁的创建和销毁连接是非常消耗资源的
连接池的使用
连接池:程序启动时,程序会建立一定数量的连接对象,并将这些连接对象放在一个尺子里。由程序动态的对池子中的连接进行分配,使用和释放。
// 1. 引入mysql模块
let mysql = require('mysql');
// 2. 创建连接池
let pool = mysql.createPool({
host:'localhost',
database:'qtummatrix',
user:'root',
password:'',
connectionLimit:50, // 连接池中最大的连接数 (默认10)
queueLimit:3 // 用于指定允许挂起的最大连接数,超过了会报错
})
// 3. 建立连接
pool.getConnection((err,conn)=>{
// 如果连接失败了,err就是错误信息对象
if(err){
console.log('与mysql数据库建立连接失败');
return
}
console.log('与mysql建立连接成功');
// conn 连接池子冻给你分配的连接对象
conn.query('select * from major',(err,data)=>{
if(err){
console.log('查询失败:'+err);
return;
}
// 对查询的结果进行操作
console.log(data);
// 释放连接,归还连接
conn.release();
})
})
封装mysql方法
封装连接池的数据库连接方式
// 1. 引入mysql模块
let mysql = require('mysql');
let db = {};
// 2. 创建连接池
let pool = mysql.createPool({
host:'localhost',
database:'qtummatrix',
user:'root',
password:'',
connectionLimit:50, // 连接池中最大的连接数 (默认10)
queueLimit:3 // 用于指定允许挂起的最大连接数,超过了会报错
})
// 3. 导出连接
// 添加一个query方法
db.query = function(sql,callback){
pool.getConnection((err,conn)=>{
if(err){
console.log(err);
return
}
conn.query(sql,(err,data)=>{
if(err){
console.log(err);
return
}
callback(data);
})
})
}
// 4. 导出模块
module.exports = db;
调用封装好的连接池
let db = require('./db');
// 使用封装的内容
db.query("select * from student",data=>{
console.log(data);
})
咱们封装好的数据库方法,基本上是万能的方法,可以实现数据库的常用操作
封装新增代码
针对数据库中的增删改查的返回值是不一样的;
增删改返回的是一个受影响的行数;
查询返回的是所有查询到的数据
-
封装插入操作
insert into student values(null,‘jack’,19,‘web前段’)
需要知道的字段:表名,插入的数据
let db = require('./2.db'); let info = { id:null, name:'jack', age:18, sex:'男' } db.insert('student',info,()=>{ console.log('新增成功!'); });
-
封装插入操作
// 封装插入一条数据 // insert into major values(null,'上海大学') let insert = (table,datas,callBack)=>{ // 拼接SQL let fields = '';// 拼接字段 let values = ''; // 拼接值 for(const k in datas){ fields += k+',', values += `'${datas[k]}',`; } // console.log(fields); // console.log(values); // 清除最后一位的逗号 fields = fields.slice(0,-1); values = values.slice(0,-1); let sql = `insert into ${table} (${fields}) values(${values})`; // console.log(sql); // 将sql语句放在query中执行 query(sql,callBack); } // 将conn下的query方法以函数的形式暴漏出去 module.exports = { query, insert };