当前位置:网站首页>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 }
})边栏推荐
- weserver發布地圖服務
- DeeCamp2022正式开营!李开复、张亚勤亲授大师课 | 创新事
- Is it safe to open an account online?
- Hutool tool class learning (continuous update)
- Horizon development board configuration network segment
- AOSP ~ logcat persistence
- Cnpm reports an error 'cnpm' is not an internal or external command, nor is it a runnable program or batch file
- The role of each part of Neural Network & thoroughly understand neural network
- CVPR上百人中招新冠,emoji成“呈堂证供”,M2 MBP被曝硬盘降速,今日更多大新闻在此...
- Windbg调试工具介绍
猜你喜欢

RT-Thread内存管理

Cvpr2022 | knowledge distillation through target aware transformer

Repoptimizer: it's actually repvgg2

C语言内存函数

The imshow function of Matplotlib displays grayscale images. Vmin and vmax2 parameters should be set

技术分享| 融合调度中的广播功能设计

Autonomous and controllable city! Release of the first domestic artiq architecture quantum computing measurement and control system

matplotlib的imshow函数显示灰度图像要设置vmin和vmax2个参数

LeCun用62页论文公布未来十年研究计划:AI自主智能

weserver发布地图服务
随机推荐
想做个答题类的微信小游戏?读这篇文章就够了
成功解决ValueError: Only TF native optimizers are supported in Eager mode
Is it safe to open an account online?
Evaluation of powerful and excellent document management software: image management, book management and document management
存算一体为何是造芯新方向?|对撞派 x 知存科技
Cvpr2022 | reexamine pooling: your receptive field is not the best
Tutorial on building pytoch model from zero (V) writing training process -- some basic configurations
Use Gerrit + Zadig to realize trunk development and trunk publishing (including byte flying Book Practice)
Write a shell script to find the "reverse order" of a number“
Cvpr2022 𞓜 loss problem in weakly supervised multi label classification
Async principle implementation
Schiederwerk Power Supply repair smps12 / 50 pfc3800 Analysis
netdata数据持久化配置
leetcode 903. Effective arrangement of Di sequences
别再重复造轮子了,推荐使用 Google Guava 开源工具类库,真心强大!
Cvpr2022 𞓜 future transformer with long-term action expectation
Exploring the way of automated testing - Preparation
Weserver publishing map service
Clickhouse database uses JDBC to store milliseconds and nanoseconds
Code tidiness learning notes