讲师:乌鸦哥
+ =
想象一下没有数据库的网站... 😱
Node.js + 数据库 = 有记忆的智能程序
新手程序员的好朋友 🤝
就像学自行车,先从最简单的开始
# 就像去商店买工具一样简单
npm install sqlite3
一行命令,搞定!🎉
三步曲:连接 → 操作 → 关闭
// 引入 sqlite3 包
const sqlite3 = require('sqlite3').verbose();
// 连接数据库(如果不存在会自动创建)
const db = new sqlite3.Database('myapp.db');
console.log('数据库连接成功!');
就像打开一个文件柜的抽屉
// 创建用户表
db.run(`
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
email TEXT UNIQUE,
age INTEGER
)
`);
console.log('用户表创建成功!');
搭建好数据的"房子框架"
// 插入一个用户
db.run(
"INSERT INTO users (name, email, age) VALUES (?, ?, ?)",
['张三', 'zhangsan@email.com', 25],
function(err) {
if (err) {
console.log('出错了:', err.message);
} else {
console.log('新用户ID:', this.lastID);
}
}
);
往文件柜里放入新档案
增删改查 - 数据库的四大天王 👑
// 批量插入多个用户
const users = [
['李四', 'lisi@email.com', 30],
['王五', 'wangwu@email.com', 28],
['赵六', 'zhaoliu@email.com', 35]
];
const stmt = db.prepare("INSERT INTO users (name, email, age) VALUES (?, ?, ?)");
users.forEach(user => {
stmt.run(user, function(err) {
if (!err) console.log(`添加用户成功,ID: ${this.lastID}`);
});
});
stmt.finalize();
// 查询所有用户
db.all("SELECT * FROM users", [], (err, rows) => {
if (err) {
console.log('查询出错:', err.message);
} else {
console.log('所有用户:');
rows.forEach(user => {
console.log(`${user.id}: ${user.name} (${user.age}岁)`);
});
}
});
// 查询特定用户
db.get("SELECT * FROM users WHERE email = ?", ['zhangsan@email.com'], (err, row) => {
if (row) {
console.log('找到用户:', row.name);
}
});
// 更新用户年龄
db.run(
"UPDATE users SET age = ? WHERE email = ?",
[26, 'zhangsan@email.com'],
function(err) {
if (err) {
console.log('更新失败:', err.message);
} else {
console.log(`更新了 ${this.changes} 条记录`);
}
}
);
就像修改档案里的信息
// 删除特定用户
db.run(
"DELETE FROM users WHERE email = ?",
['unwanted@email.com'],
function(err) {
if (err) {
console.log('删除失败:', err.message);
} else {
console.log(`删除了 ${this.changes} 条记录`);
}
}
);
小心使用,删除了就找不回来了!⚠️
把所有知识点串起来 🔗
const sqlite3 = require('sqlite3').verbose();
// 创建数据库连接
const db = new sqlite3.Database('blog.db');
// 创建文章表
db.serialize(() => {
// 创建表
db.run(`CREATE TABLE IF NOT EXISTS articles (
id INTEGER PRIMARY KEY AUTOINCREMENT,
title TEXT NOT NULL,
content TEXT,
author TEXT,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
)`);
// 插入示例文章
db.run("INSERT INTO articles (title, content, author) VALUES (?, ?, ?)",
['我的第一篇博客', '今天学会了用Node.js操作数据库!', '张三']);
// 查询所有文章
db.all("SELECT * FROM articles", [], (err, rows) => {
if (!err) {
console.log('博客文章列表:');
rows.forEach(article => {
console.log(`- ${article.title} (作者: ${article.author})`);
});
}
});
});
// 关闭数据库连接
db.close((err) => {
if (err) console.error(err.message);
console.log('数据库连接已关闭');
});
写出更好的数据库代码 ✨
// ✅ 好的做法 - 使用参数化查询
db.run("SELECT * FROM users WHERE email = ?", [userEmail]);
// ❌ 危险的做法 - 直接拼接字符串
db.run("SELECT * FROM users WHERE email = '" + userEmail + "'");
// 使用事务批量插入
db.serialize(() => {
db.run("BEGIN TRANSACTION");
users.forEach(user => {
stmt.run(user);
});
db.run("COMMIT");
});
恭喜!你已经掌握了数据库编程的基础! 🎉
下节课我们将学习更高级的数据库操作技巧