如何在Vue3和Vite项目中用SQLite数据库进行数据存储

 更新时间:2024年03月22日 11:50:48   作者:A丶尘土  
SQLite是一种嵌入式关系型数据库管理系统,是一个零配置、无服务器的、自给自足的、事务性的SQL数据库引擎,这篇文章主要给大家介绍了关于如何在Vue3和Vite项目中用SQLite数据库进行数据存储的相关资料,需要的朋友可以参考下

本篇文章将介绍如何在 Vue3 和 Vite 项目中使用 SQLite 数据库进行数据存储。我们将使用 better-sqlite3 库来创建和管理 SQLite 数据库,并将使用 Vue3 来开发前端界面。

创建项目

首先,我们需要创建一个新的 Vue3 项目。可以使用以下命令创建一个名为 vue-sqlite 的新项目:

vue create vue-sqlite

然后,安装所需的依赖项,包括 better-sqlite3

npm install better-sqlite3

创建 SQLite 数据库

接下来,我们需要创建 SQLite 数据库。可以在项目根目录下创建一个名为 database.js 的文件,并将以下代码添加到文件中:

const sqlite = require('better-sqlite3')
const path = require('path')

const dbPath = path.join(__dirname, 'database.sqlite')
const db = new sqlite(dbPath)

const initDb = () => {
  db.prepare(`
    CREATE TABLE IF NOT EXISTS todos (
      id INTEGER PRIMARY KEY AUTOINCREMENT,
      text TEXT NOT NULL,
      completed INTEGER NOT NULL DEFAULT 0
    );
  `).run()
}

module.exports = {
  db,
  initDb,
}

在上述代码中,我们使用 better-sqlite3 库创建了一个名为 db 的 SQLite 数据库实例,并将其导出。同时,我们还定义了一个名为 initDb 的函数,用于初始化数据库。在 initDb 函数中,我们使用 SQL 语句创建了一个名为 todos 的表,该表包括 idtext 和 completed 三个字段。

创建数据模型

接下来,我们需要创建数据模型。可以在项目根目录下创建一个名为 Todo.js 的文件,并将以下代码添加到文件中:

const { db } = require('./database')

class Todo {
  constructor(text, completed = false) {
    this.text = text
    this.completed = completed
  }

  save() {
    const stmt = db.prepare(`
      INSERT INTO todos (text, completed)
      VALUES (?, ?)
    `)
    stmt.run(this.text, this.completed ? 1 : 0)
  }

  static findAll() {
    const stmt = db.prepare(`
      SELECT *
      FROM todos
    `)
    const rows = stmt.all()
    return rows.map(row => new Todo(row.text, row.completed))
  }

  static findById(id) {
    const stmt = db.prepare(`
      SELECT *
      FROM todos
      WHERE id = ?
    `)
    const row = stmt.get(id)
    return row ? new Todo(row.text, row.completed) : null
  }

  update() {
    const stmt = db.prepare(`
      UPDATE todos
      SET text = ?, completed = ?
      WHERE id = ?
    `)
    stmt.run(this.text, this.completed ? 1 : 0, this.id)
  }

  delete() {
    const stmt = db.prepare(`
      DELETE FROM todos
      WHERE id = ?
    `)
    stmt.run(this.id)
  }
}

module.exports = Todo

在上述代码中,我们定义了一个名为 Todo 的类,用于表示待办事项的数据模型。在构造函数中,我们定义了 text 和 completed 两个属性。同时,我们还定义了 savefindAllfindByIdupdate 和 delete 等方法,用于对数据进行增删改查操作。

在 save 方法中,我们使用 SQL 语句将当前待办事项插入到 todos 表中。在 findAll 方法中,我们使用 SQL 语句查询所有的待办事项,并将查询结果转换为 Todo 类的实例。在 findById 方法中,我们使用 SQL 语句查询指定 ID 的待办事项,并将查询结果转换为 Todo 类的实例。在 update 方法中,我们使用 SQL 语句更新指定 ID 的待办事项。在 delete 方法中,我们使用 SQL 语句删除指定 ID 的待办事项。

创建界面

接下来,我们需要创建界面。可以在项目根目录下创建一个名为 TodoList.vue 的文件,并将以下代码添加到文件中:

<template>
  <div>
    <h1>Todo List</h1>
    <form @submit.prevent="addTodo"> 
      <input v-model="newTodoText" type="text" placeholder="Add a new todo">
      <button type="submit">Add</button>
    </form>
    <ul>
      <li v-for="todo in todos" :key="todo.id">
        <input type="checkbox" v-model="todo.completed" @change="updateTodo(todo)">
        <span :class="{ completed: todo.completed }">{{ todo.text }}</span>
        <button @click="deleteTodo(todo)">Delete</button>
      </li>
    </ul>
  </div>
</template>

<script>
import Todo from './Todo'

export default {
  data() {
    return {
      newTodoText: '',
      todos: [],
    }
  },
  async mounted() {
    const rows = await Todo.findAll()
    this.todos = rows
  },
  methods: {
    async addTodo() {
      const todo = new Todo(this.newTodoText)
      todo.save()
      this.todos.push(todo)
      this.newTodoText = ''
    },
    async updateTodo(todo) {
      todo.update()
    },
    async deleteTodo(todo) {
      todo.delete()
      this.todos = this.todos.filter(t => t.id !== todo.id)
    },
  },
}
</script>

<style>
.completed {
  text-decoration: line-through;
}
</style>

在上述代码中,我们定义了一个名为 TodoList 的 Vue组件,用于展示待办事项列表。在 data 中,我们定义了 newTodoText 和 todos 两个属性。在 mounted 生命周期钩子中,我们使用 Todo 类的 findAll 方法查询所有的待办事项,并将查询结果赋值给 todos 属性。在模板中,我们使用 v-for 指令渲染 todos 列表,并通过 v-model 指令和 @change 事件实现待办事项的勾选和更新。同时,我们也通过 @click 事件实现了待办事项的删除。

集成 SQLite

现在,我们已经可以使用 Todo 类对 SQLite 数据库进行增删改查操作,也已经可以通过 TodoList 组件展示待办事项列表。接下来,我们需要将它们集成起来。可以在 src/main.js 文件中将以下代码添加到文件中:

import { createApp } from 'vue'
import App from './App.vue'
import { initDb } from './database'

initDb()

createApp(App).mount('#app')

在上述代码中,我们首先调用了 initDb() 函数,用于初始化 SQLite 数据库。然后,我们使用 createApp 函数创建一个 Vue 应用,并将其挂载到 HTML 中的 #app 元素上。

现在,我们已经完成了使用 Vue3 和 Vite 创建 SQLite 数据库并进行数据存储的过程。可以通过运行以下命令启动应用程序:

npm run dev

打开浏览器并访问 http://localhost:3000,即可看到待办事项列表页面。现在,我们可以添加、更新和删除待办事项,并且它们的数据会存储在 SQLite 数据库中。

结语

本文介绍了如何在 Vue3 和 Vite 项目中使用 SQLite 数据库进行数据存储。我们使用了 better-sqlite3 库来创建和管理 SQLite 数据库,并使用 Vue3 来开发前端界面。通过本文的指导,您可以轻松地将 SQLite 数据库集成到您的

到此这篇关于如何在Vue3和Vite项目中用SQLite数据库进行数据存储的文章就介绍到这了,更多相关Vue3 Vite用SQLite数据存储内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • vue+SpringBoot使用WebSocket方式

    vue+SpringBoot使用WebSocket方式

    WebSocket是一种全双工通信协议,通过HTTP升级机制建立连接,支持实时双向数据传输,示例代码展示了如何在Java Spring Boot和Vue.js中实现WebSocket服务和客户端
    2025-02-02
  • 使用el-upload实现文件上传方式(包括预览,下载)

    使用el-upload实现文件上传方式(包括预览,下载)

    该文章介绍了两种文件上传、预览和下载的方法,分别是通过卡片形式和按钮形式,卡片形式中的下载和预览功能尚未完善,父组件使用了el-upload组件,可以实现新增、编辑和查看文件的功能
    2025-11-11
  • Vue使用moment处理不同时区的时间的操作方法

    Vue使用moment处理不同时区的时间的操作方法

    这篇文章主要介绍了如何在Vue项目中使用moment和moment-timezone插件处理时区,包括安装依赖、基础使用方法(如时区转换)、全局挂载以及注意事项(如时区标识规范、UTC时间处理和Vue3适配),需要的朋友可以参考下
    2026-03-03
  • vue项目初始化到登录login页面的示例

    vue项目初始化到登录login页面的示例

    今天小编就为大家分享一篇vue项目初始化到登录login页面的示例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-10-10
  • vue中使用百度脑图kityminder-core二次开发的实现

    vue中使用百度脑图kityminder-core二次开发的实现

    这篇文章主要介绍了vue中使用百度脑图kityminder-core二次开发的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-09-09
  • Vue项目中使用flow做类型检测的方法

    Vue项目中使用flow做类型检测的方法

    这篇文章主要介绍了Vue项目中使用flow做类型检测的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-03-03
  • 微信小程序开发实现消息框弹出

    微信小程序开发实现消息框弹出

    在小程序的wxml文件中创建消息框,消息框一般包含要提示的消息内容以及确认和取消按钮,在小程序的wxss文件中定义消息框的样式,在小程序的js文件中,我们需要通过Animation对象实现消息框的弹出动画
    2023-12-12
  • element动态路由面包屑的实现示例

    element动态路由面包屑的实现示例

    本文主要介绍了element动态路由面包屑的实现示例,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09
  • vue实现多栏布局拖拽

    vue实现多栏布局拖拽

    这篇文章主要为大家详细介绍了vue实现多栏布局拖拽,改变盒子的宽度,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09
  • vue登录注册实例详解

    vue登录注册实例详解

    在本篇内容里小编给大家分享的是关于vue登录注册的相关实例内容以及写法分析,有需要朋友们可以学习下。
    2019-09-09

最新评论