文件系统和数据库系统的对比
- 文件系统用文件来保存数据,不宜共享;数据库系统用数据库统一存储数据
- 文件系统中的程序(代码)和数据有一定的联系;数据库系统中的程序和数据分离
- 文件系统存储数据不安全
数据库分类
- 非关系型数据库
- MongoDB等
- 关系型数据库
- MySQL等
Node.js实现对文件内容的增删查改
const readline = require('readline');
const fs = require('fs');
const FILEPATH = './db/my.json'
const rl = readline.createInterface({
input: process.stdin, //可读流
output: process.stdout //可写流
});
function update(key, value) {
fs.readFile(FILEPATH, 'utf8', (err, data) => {
if (err) {
console.log(err);
}
const json = JSON.parse(data);
if (json && json[key]) {
json[key] = value;
fs.writeFile(FILEPATH, JSON.stringify(json), err => {
if (err) {
console.log(err);
} else {
console.log('写入成功');
}
});
} else {
console.log('Not Found');
}
})
}
function del(key) {
fs.readFile(FILEPATH, 'utf8', (err, data) => {
if (err) {
console.log(err);
}
const json = JSON.parse(data);
let flag = delete json[key];
if (flag) {
console.log('删除成功');
fs.writeFile(FILEPATH, JSON.stringify(json), err => {
if (err) {
console.log(err);
} else {
console.log('写入成功');
}
});
}
})
}
function get(key) {
fs.readFile(FILEPATH, 'utf8', (err, data) => {
if (err) {
console.log(err);
}
const json = JSON.parse(data);
if (json && json[key]) {
console.log(json[key]);
} else {
console.log('Not Found');
}
})
}
function set(key, value) {
fs.readFile(FILEPATH, 'utf8', (err, data) => {
if (err) {
console.log(err);
}
//可能是空对象
const json = data ? JSON.parse(data) : {};
json[key] = value;
fs.writeFile(FILEPATH, JSON.stringify(json), err => {
if (err) {
console.log(err);
} else {
console.log('写入成功');
}
});
})
}
rl.on('line', (input) => {
//终端键入格式:set name holo
const [op, key, value] = input.split(' ');//以空格分割
switch (op) {
case 'set':
set(key, value);
break;
case 'get':
get(key);
break;
case 'del':
del(key);
break;
case 'update':
update(key, value);
break;
case 'exit':
rl.close();
break;
default:
console.log('没有该指令');
break;
}
});
rl.on('close', () => {
console.log('退出');
process.exit(0);
})
Node.js连接MySQL
安装依赖包:
cnpm i mysql -S
const mysql = require('mysql');
//创建连接对象
const conn = mysql.createConnection({
host: 'localhost',
user: 'root',
password: '******',
database: 'db1'
})
//连接数据库
conn.connect(err => {
if (err) {
throw err;
}
console.log('连接成功');
})
//增删查改
const CREATE_SQL = `CREATE TABLE IF NOT EXISTS test(id INT NOT NULL PRIMARY KEY auto_increment,name VARCHAR(20))`;
const INSERT_SQL = `INSERT INTO test(name) VALUES(?)`;
const SELECT_SQL = `SELECT * FROM test WHERE id=?`;
const DELETE_SQL = `DELETE FROM test WHERE id=?`;
conn.query(CREATE_SQL, (error, results, fields) => {
if (error) {
throw error;
}
//参数:需要执行sql语句 填充占位符的值 回调函数
conn.query(INSERT_SQL, ['holo'], (error, results, fields) => {
if (error) {
throw error;
}
conn.query(SELECT_SQL, [6], (error, results, fields) => {
if (error) {
throw error;
}
//查询时,results返回查询结果
console.log(results[0].name);
//断开连接
conn.end(); //如果query语句有嵌套,则end()需要在最后一个query内执行
})
})
})
删除操作:
conn.query(DELETE_SQL, [10], (error, results, fields) => {
if (error) {
throw error;
}
//断开连接
conn.end();
})
封装MySQL的query方法
上面的query查询层层嵌套,不仅操作繁琐,而且存在回调地狱的问题,通过async/await进行代码封装,不仅能够简化操作,而且能够解决回调地狱的问题。
mysqlConfig.js
module.exports = {
host: 'localhost',
user: 'root',
password: '******',
database: 'db1'
}
mysql.js
const mysql = require('mysql');
const mysqlConfig = require('./mysqlConfig');
module.exports = {
query: function (sql, params) {
return new Promise((resolve, reject) => {
//创建连接对象
const conn = mysql.createConnection(mysqlConfig);
//连接数据库
conn.connect(err => {
if (err) {
throw err;
}
console.log('连接成功');
});
//格式化sql语句
sql = mysql.format(sql, params);
//查询
conn.query(sql, (error, results, fields) => {
if (error) {
throw reject(error);
}
resolve(results);
//断开连接,必须在查询语句后面
conn.end();
})
})
}
}
Tips: 用到的format()方法
var sql = mysql.format('UPDATE posts SET modified = ? WHERE id = ?', [CURRENT_TIMESTAMP, 42]);
console.log(sql); // UPDATE posts SET modified = CURRENT_TIMESTAMP() WHERE id = 42
使用
const CREATE_SQL = `CREATE TABLE IF NOT EXISTS test(id INT NOT NULL PRIMARY KEY auto_increment,name VARCHAR(20))`;
const INSERT_SQL = `INSERT INTO test(name) VALUES(?)`;
const SELECT_SQL = `SELECT * FROM test WHERE id=?`;
const DELETE_SQL = `DELETE FROM test WHERE id=?`;
//导入封装好的mysql
const db = require('./db/mysql');
async function asyncQuery() {
try {
// const res = await db.query(CREATE_SQL);
// const res = await db.query(INSERT_SQL, ['holo']);
// const res = await db.query(SELECT_SQL, [1]);
const res = await db.query(DELETE_SQL, [1]);
console.log(res);
} catch (error) {
console.log(error);
}
}
asyncQuery();