码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • koa2+better-sqlite3实现增删改查


    目录

    查询所有记录

     查询第一条记录

    条件查询

    模糊查询

    新增记录

     修改记录

     删除记录

     创建表


    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:

    1. const Database = require("better-sqlite3")
    2. const db = new Database('mySqlite3.db', { verbose: console.log })
    3. module.exports = db

    users.js:

    1. const router = require('koa-router')()
    2. const db = require('../db_sqlite3.js')
    3. router.prefix('/users')
    4. router.get('/', function (ctx, next) {
    5. const stmt = db.prepare('select * from users');
    6. let row = stmt.all()//返回全部记录
    7. ctx.body = { data: row }
    8. })
    9. module.exports = router

      注意:此时访问/users接口将会报以下错误,因为此时mySqlite3.db是一个空数据库,还没有表

     在navicate中建一张users表:

     此时,再次访问接口:http://localhost:3000/users

     

    查询所有记录

    1. //查询所有记录
    2. router.get('/', function (ctx, next) {
    3. const stmt = db.prepare('select * from users');
    4. let row = stmt.all()//返回全部记录
    5. ctx.body = { data: row }
    6. })

     查询第一条记录

    1. router.get('/', function (ctx, next) {
    2. const stmt = db.prepare('select * from users');
    3. let row = stmt.get()//返回第一条记录
    4. ctx.body = { data: row }
    5. })

    条件查询

    以?占位。需要严格按照顺序来传参

    单条件查询:

    1. router.get('/', function (ctx, next) {
    2. const stmt = db.prepare('select * from users where username = ?');
    3. let row = stmt.get('李四')
    4. ctx.body = { data: row }
    5. })

    多条件查询 

    1. router.get('/', function (ctx, next) {
    2. const stmt = db.prepare('select * from users where username = ? and password = ?');
    3. let row = stmt.get('李四', "4444")
    4. ctx.body = { data: row }
    5. })

     

     以@占位。参数放在对象里面,顺序不重要

    1. router.get('/', function (ctx, next) {
    2. const stmt = db.prepare('select * from users where username = @username and password = @password');
    3. let row = stmt.get({ password: "555", username: "王五" })
    4. ctx.body = { data: row }
    5. })

    模糊查询

    注意双引号一定要在外面

    1. //模糊查询。注意双引号一定要在外面
    2. router.get('/', function (ctx, next) {
    3. const stmt = db.prepare("select * from users where username like '%四%'");
    4. let row = stmt.all()
    5. ctx.body = { data: row }
    6. })

    新增记录

    新增1条记录:

    1. router.get('/', function (ctx, next) {
    2. const stmt = db.prepare("insert into users(username,password) values (@username,@password)");
    3. let row = stmt.run({ username: "赵六", password: "666" })
    4. ctx.body = { data: row }
    5. })

     新增多条记录:

    1. router.get('/', function (ctx, next) {
    2. const stmt = db.prepare("insert into users(username,password) values (@username,@password)");
    3. //创建批量插入过程
    4. const insertMany = db.transaction((users) => {
    5. for (const user of users) {
    6. stmt.run(user)
    7. };
    8. });
    9. //执行批量插入语句
    10. let row = insertMany([
    11. { username: '钱七', password: "777" },
    12. { username: '孙八', password: "888" },
    13. { username: '李九', password: "999" },
    14. ]);
    15. ctx.body = { data: row }
    16. })

     修改记录

    1. router.get('/', function (ctx, next) {
    2. const stmt = db.prepare("update users set username = @username, password = @password where id =@id");
    3. let row = stmt.run({ id: 1, username: "张三三", password: "3333" })
    4. ctx.body = { data: row }
    5. })

     删除记录

    1. router.get('/', function (ctx, next) {
    2. const stmt = db.prepare("delete from users where username=?");
    3. let row = stmt.run('李四')
    4. ctx.body = { data: row }
    5. })

     创建表

    1. router.get('/', function (ctx, next) {
    2. const create_table_users =
    3. `create table users
    4. (
    5. id INTEGER PRIMARY KEY AUTOINCREMENT,
    6. username CHAR(50) NOT NULL,
    7. password CHAR(50)
    8. );`
    9. let result = db.exec(create_table_users)//执行sql命令
    10. ctx.body = { data: result }
    11. })

  • 相关阅读:
    门店数字化转型| 健身门店管理系统| 小程序开发教程
    [管理与领导-123]:IT人看清职场中的隐性规则 - 19 - 管理者激发团队拿到结果的方式和层次不同,你愿意跟随哪一种类型的领导?
    非局部均值滤波(NON-LOCAL-mean)/注意力机制
    PTA 7-72 成绩分析表
    什么是Python之禅?
    基于微信小程序的知识题库系统设计与实现-计算机毕业设计源码+LW文档
    新手学编程前端好还是后端?
    java面向对象(二)
    设计原则之显式依赖关系
    论文精讲目录
  • 原文地址:https://blog.csdn.net/qq_40323256/article/details/125508713
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号