目录
查询所有记录
?查询第一条记录
条件查询
模糊查询
新增记录
?修改记录
?删除记录
?创建表
sqlite3入门:sqlite3入门_~疆的博客-CSDN博客参考:SQLite 教程 | 菜鸟教程https://www.runoob.com/sqlite/sqlite-tutorial.html查看本地是否已安装sqlite3,出现以下界面表示 sqlite3已安装 右键新建一个lj_sqlite3.txt文件,将txt后缀改为db,一个sqlite3数据库就建好了,数据库名即为lj_sqlite3,如下: 参考:koa2+better-sqlite3实现增删改查_~疆的博客-CSDN博客koa2中安装better-sqlite3https://blog.csdhttps://blog.csdn.net/qq_40323256/article/details/125508731?搭建koa2脚手架:
koa-generator搭建koa2项目_~疆的博客-CSDN博客1、全局安装koa-generatorcnpm i -g koa-generator2、创建koa项目,并默认使用ejs引擎koa2 -e server这样就在当前文件夹中建立了一个名为server的文件夹,其内容如下3、安装依赖打开dos窗口,并进入到server文件夹,执行以下命令安装依赖cnpm i 4、启动项目使用npm start 启动项目,但是这个命令只能启动一次,每次更改代码后又要使用命令重启服务,比较繁琐,因此,为了使代码修改刷新页面能看到.https://blog.csdn.net/qq_40323256/article/details/109256624
better-sqlite3中的对象有两类,一个是Database类,一个是Statement类,Database对象可以实现数据库的连接和基本操作,Database.prepare()用于生成Statement对象,Statement对象是对SQL语句的封装,方便执行固定的语句。
?koa2中安装better-sqlite3
cnpm i -S better-sqlite3
在脚手架根目录新建db_sqlite3.js和mySqlite3.db?
?db_sqlite3.js:
const Database = require("better-sqlite3")
const db = new Database('mySqlite3.db', { verbose: console.log })
module.exports = db
users.js:
const router = require('koa-router')()
const db = require('../db_sqlite3.js')
router.prefix('/users')
router.get('/', function (ctx, next) {
const stmt = db.prepare('select * from users');
let row = stmt.all()//返回全部记录
ctx.body = { data: row }
})
module.exports = router
??注意:此时访问/users接口将会报以下错误,因为此时mySqlite3.db是一个空数据库,还没有表
?在navicate中建一张users表:
?此时,再次访问接口:http://localhost:3000/users
?
查询所有记录
//查询所有记录
router.get('/', function (ctx, next) {
const stmt = db.prepare('select * from users');
let row = stmt.all()//返回全部记录
ctx.body = { data: row }
})
?查询第一条记录
router.get('/', function (ctx, next) {
const stmt = db.prepare('select * from users');
let row = stmt.get()//返回第一条记录
ctx.body = { data: row }
})
条件查询
以?占位。需要严格按照顺序来传参
单条件查询:
router.get('/', function (ctx, next) {
const stmt = db.prepare('select * from users where username = ?');
let row = stmt.get('李四')
ctx.body = { data: row }
})
多条件查询?
router.get('/', function (ctx, next) {
const stmt = db.prepare('select * from users where username = ? and password = ?');
let row = stmt.get('李四', "4444")
ctx.body = { data: row }
})
?
?以@占位。参数放在对象里面,顺序不重要
router.get('/', function (ctx, next) {
const stmt = db.prepare('select * from users where username = @username and password = @password');
let row = stmt.get({ password: "555", username: "王五" })
ctx.body = { data: row }
})
模糊查询
注意双引号一定要在外面
//模糊查询。注意双引号一定要在外面
router.get('/', function (ctx, next) {
const stmt = db.prepare("select * from users where username like '%四%'");
let row = stmt.all()
ctx.body = { data: row }
})
新增记录
新增1条记录:
router.get('/', function (ctx, next) {
const stmt = db.prepare("insert into users(username,password) values (@username,@password)");
let row = stmt.run({ username: "赵六", password: "666" })
ctx.body = { data: row }
})
?新增多条记录:
router.get('/', function (ctx, next) {
const stmt = db.prepare("insert into users(username,password) values (@username,@password)");
//创建批量插入过程
const insertMany = db.transaction((users) => {
for (const user of users) {
stmt.run(user)
};
});
//执行批量插入语句
let row = insertMany([
{ username: '钱七', password: "777" },
{ username: '孙八', password: "888" },
{ username: '李九', password: "999" },
]);
ctx.body = { data: row }
})
?修改记录
router.get('/', function (ctx, next) {
const stmt = db.prepare("update users set username = @username, password = @password where id =@id");
let row = stmt.run({ id: 1, username: "张三三", password: "3333" })
ctx.body = { data: row }
})
?删除记录
router.get('/', function (ctx, next) {
const stmt = db.prepare("delete from users where username=?");
let row = stmt.run('李四')
ctx.body = { data: row }
})
?创建表
router.get('/', function (ctx, next) {
const create_table_users =
`create table users
(
id INTEGER PRIMARY KEY AUTOINCREMENT,
username CHAR(50) NOT NULL,
password CHAR(50)
);`
let result = db.exec(create_table_users)//执行sql命令
ctx.body = { data: result }
})
|