当前位置:网站首页>koa2+better-sqlite3实现增删改查
koa2+better-sqlite3实现增删改查
2022-06-29 12:36:00 【~疆】
目录
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 [email protected]");
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 }
})边栏推荐
- 基于51单片机控制的BUCK开关电源Proteus仿真
- GEE——美国LANDFIRE火灾数据集
- Cnpm reports an error 'cnpm' is not an internal or external command, nor is it a runnable program or batch file
- Write a shell script to find the "reverse order" of a number“
- C语言的指针详解
- 如何统计项目代码(比如微信小程序等等)
- 存算一体为何是造芯新方向?|对撞派 x 知存科技
- 神经网络各个部分的作用 & 彻底理解神经网络
- CVPR2022 | 长期行动预期的Future Transformer
- iMile 利用 Zadig 多云环境周部署千次,跨云跨地域持续交付全球业务
猜你喜欢

Cvpr2022 𞓜 thin domain adaptation

Cnpm reports an error 'cnpm' is not an internal or external command, nor is it a runnable program or batch file

Weserver Publishing Map Service

Cvpr2022 | knowledge distillation through target aware transformer

维修记录导出的excel表格太大怎么办?

The role of each part of Neural Network & thoroughly understand neural network

DeeCamp2022正式开营!李开复、张亚勤亲授大师课 | 创新事

Tutorial on building pytoch model from zero (IV) compiling training process -- Parameter Analysis

揭秘!付费会员制下的那些小心机!

Tutorial on building pytoch model from zero (V) writing training process -- some basic configurations
随机推荐
韩国AI团队抄袭震动学界!1个导师带51个学生,还是抄袭惯犯
Schiederwerk power supply maintenance smps12/50 pfc3800 analysis
Getting started with mybaits (including example tutorial and source code)
AOSP ~ initialization language
Cisco simulator simple campus network design, final assignment difficulty
Leetcode game 299
Write a shell script to find the "reverse order" of a number“
开户可以在网上开么?能安全吗
[cloud resident co creation] industrial wisdom "brain", a new acceleration script for old factories
Windwos10 installing sshd service
CVPR2022 | 长期行动预期的Future Transformer
leetcode 522. 最长特殊序列 II
3D model downloading and animation control
Memorized Function
@Table爆红
*Clock in algorithm *leetcode 146 Analysis of LRU cache algorithm
leetcode 903. Effective arrangement of Di sequences
The imshow function of Matplotlib displays grayscale images. Vmin and vmax2 parameters should be set
Cvpr2022 𞓜 future transformer with long-term action expectation
Interesting talk on network protocol (II) transport layer