如何在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中el-tree树全部展开或收起的实现示例

    Vue中el-tree树全部展开或收起的实现示例

    本文主要介绍了Vue中el-tree树全部展开或收起的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-07-07
  • Vue中$root的使用方法及注意事项

    Vue中$root的使用方法及注意事项

    这篇文章主要给大家介绍了关于Vue中$root使用方法及注意事项的相关资料,vue中$root是用来访问根组件的,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-03-03
  • 对vuex中store和$store的区别说明

    对vuex中store和$store的区别说明

    这篇文章主要介绍了对vuex中store和$store的区别说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-07-07
  • vue前端img访问鉴权后端进行拦截的代码示例

    vue前端img访问鉴权后端进行拦截的代码示例

    路由拦截是一种在用户访问特定页面之前对其进行拦截和处理的机制,下面这篇文章主要给大家介绍了关于vue前端img访问鉴权后端进行拦截的相关资料,需要的朋友可以参考下
    2024-03-03
  • 详解vue-cli + webpack 多页面实例配置优化方法

    详解vue-cli + webpack 多页面实例配置优化方法

    本篇文章主要介绍了详解vue-cli + webpack 多页面实例配置优化方法,具有一定的参考价值,有兴趣的可以了解一下
    2017-07-07
  • vue router带参数页面刷新或回退参数消失的解决方法

    vue router带参数页面刷新或回退参数消失的解决方法

    这篇文章主要介绍了vue router带参数页面刷新或回退参数消失的解决方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-02-02
  • Vue绑定内联样式问题

    Vue绑定内联样式问题

    这篇文章主要介绍了Vue绑定内联样式的相关知识,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-10-10
  • vue中使用input[type=

    vue中使用input[type="file"]实现文件上传功能

    这篇文章主要介绍了vue中使用input[type="file"]实现文件上传功能,实现代码简单易懂,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-09-09
  • Vue3使用video-player实现视频播放

    Vue3使用video-player实现视频播放

    video-player是一个基于video.js的视频播放器组件,本文主要介绍了Vue3使用video-player实现视频播放,具有一定的参考价值,感兴趣的可以了解一下
    2024-01-01
  • Nuxt3重点特性使用举例问题记录

    Nuxt3重点特性使用举例问题记录

    Nuxt3 使用 Vue.js 作为视图引擎,Nuxt3 中提供了所有 Vue 3 功能,所以我们创建的Nuxt项目其实也是vue3项目,这篇文章主要介绍了Nuxt3重点特性使用举例记录,需要的朋友可以参考下
    2022-12-12

最新评论