欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

如何在Vue3和Vite項目中用SQLite數(shù)據(jù)庫進行數(shù)據(jù)存儲

 更新時間:2024年03月22日 11:50:48   作者:A丶塵土  
SQLite是一種嵌入式關系型數(shù)據(jù)庫管理系統(tǒng),是一個零配置、無服務器的、自給自足的、事務性的SQL數(shù)據(jù)庫引擎,這篇文章主要給大家介紹了關于如何在Vue3和Vite項目中用SQLite數(shù)據(jù)庫進行數(shù)據(jù)存儲的相關資料,需要的朋友可以參考下

本篇文章將介紹如何在 Vue3 和 Vite 項目中使用 SQLite 數(shù)據(jù)庫進行數(shù)據(jù)存儲。我們將使用 better-sqlite3 庫來創(chuàng)建和管理 SQLite 數(shù)據(jù)庫,并將使用 Vue3 來開發(fā)前端界面。

創(chuàng)建項目

首先,我們需要創(chuàng)建一個新的 Vue3 項目??梢允褂靡韵旅顒?chuàng)建一個名為 vue-sqlite 的新項目:

vue create vue-sqlite

然后,安裝所需的依賴項,包括 better-sqlite3

npm install better-sqlite3

創(chuàng)建 SQLite 數(shù)據(jù)庫

接下來,我們需要創(chuàng)建 SQLite 數(shù)據(jù)庫。可以在項目根目錄下創(chuàng)建一個名為 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 庫創(chuàng)建了一個名為 db 的 SQLite 數(shù)據(jù)庫實例,并將其導出。同時,我們還定義了一個名為 initDb 的函數(shù),用于初始化數(shù)據(jù)庫。在 initDb 函數(shù)中,我們使用 SQL 語句創(chuàng)建了一個名為 todos 的表,該表包括 id、text 和 completed 三個字段。

創(chuàng)建數(shù)據(jù)模型

接下來,我們需要創(chuàng)建數(shù)據(jù)模型??梢栽陧椖扛夸浵聞?chuàng)建一個名為 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 的類,用于表示待辦事項的數(shù)據(jù)模型。在構造函數(shù)中,我們定義了 text 和 completed 兩個屬性。同時,我們還定義了 save、findAll、findById、update 和 delete 等方法,用于對數(shù)據(jù)進行增刪改查操作。

在 save 方法中,我們使用 SQL 語句將當前待辦事項插入到 todos 表中。在 findAll 方法中,我們使用 SQL 語句查詢所有的待辦事項,并將查詢結果轉換為 Todo 類的實例。在 findById 方法中,我們使用 SQL 語句查詢指定 ID 的待辦事項,并將查詢結果轉換為 Todo 類的實例。在 update 方法中,我們使用 SQL 語句更新指定 ID 的待辦事項。在 delete 方法中,我們使用 SQL 語句刪除指定 ID 的待辦事項。

創(chuàng)建界面

接下來,我們需要創(chuàng)建界面??梢栽陧椖扛夸浵聞?chuàng)建一個名為 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 事件實現(xiàn)待辦事項的勾選和更新。同時,我們也通過 @click 事件實現(xiàn)了待辦事項的刪除。

集成 SQLite

現(xiàn)在,我們已經(jīng)可以使用 Todo 類對 SQLite 數(shù)據(jù)庫進行增刪改查操作,也已經(jīng)可以通過 TodoList 組件展示待辦事項列表。接下來,我們需要將它們集成起來。可以在 src/main.js 文件中將以下代碼添加到文件中:

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

initDb()

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

在上述代碼中,我們首先調(diào)用了 initDb() 函數(shù),用于初始化 SQLite 數(shù)據(jù)庫。然后,我們使用 createApp 函數(shù)創(chuàng)建一個 Vue 應用,并將其掛載到 HTML 中的 #app 元素上。

現(xiàn)在,我們已經(jīng)完成了使用 Vue3 和 Vite 創(chuàng)建 SQLite 數(shù)據(jù)庫并進行數(shù)據(jù)存儲的過程??梢酝ㄟ^運行以下命令啟動應用程序:

npm run dev

打開瀏覽器并訪問 http://localhost:3000,即可看到待辦事項列表頁面?,F(xiàn)在,我們可以添加、更新和刪除待辦事項,并且它們的數(shù)據(jù)會存儲在 SQLite 數(shù)據(jù)庫中。

結語

本文介紹了如何在 Vue3 和 Vite 項目中使用 SQLite 數(shù)據(jù)庫進行數(shù)據(jù)存儲。我們使用了 better-sqlite3 庫來創(chuàng)建和管理 SQLite 數(shù)據(jù)庫,并使用 Vue3 來開發(fā)前端界面。通過本文的指導,您可以輕松地將 SQLite 數(shù)據(jù)庫集成到您的

到此這篇關于如何在Vue3和Vite項目中用SQLite數(shù)據(jù)庫進行數(shù)據(jù)存儲的文章就介紹到這了,更多相關Vue3 Vite用SQLite數(shù)據(jù)存儲內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Vue中el-tree樹全部展開或收起的實現(xiàn)示例

    Vue中el-tree樹全部展開或收起的實現(xiàn)示例

    本文主要介紹了Vue中el-tree樹全部展開或收起的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-07-07
  • Vue中$root的使用方法及注意事項

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

    這篇文章主要給大家介紹了關于Vue中$root使用方法及注意事項的相關資料,vue中$root是用來訪問根組件的,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-03-03
  • 對vuex中store和$store的區(qū)別說明

    對vuex中store和$store的區(qū)別說明

    這篇文章主要介紹了對vuex中store和$store的區(qū)別說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-07-07
  • vue前端img訪問鑒權后端進行攔截的代碼示例

    vue前端img訪問鑒權后端進行攔截的代碼示例

    路由攔截是一種在用戶訪問特定頁面之前對其進行攔截和處理的機制,下面這篇文章主要給大家介紹了關于vue前端img訪問鑒權后端進行攔截的相關資料,需要的朋友可以參考下
    2024-03-03
  • 詳解vue-cli + webpack 多頁面實例配置優(yōu)化方法

    詳解vue-cli + webpack 多頁面實例配置優(yōu)化方法

    本篇文章主要介紹了詳解vue-cli + webpack 多頁面實例配置優(yōu)化方法,具有一定的參考價值,有興趣的可以了解一下
    2017-07-07
  • vue router帶參數(shù)頁面刷新或回退參數(shù)消失的解決方法

    vue router帶參數(shù)頁面刷新或回退參數(shù)消失的解決方法

    這篇文章主要介紹了vue router帶參數(shù)頁面刷新或回退參數(shù)消失的解決方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-02-02
  • Vue綁定內(nèi)聯(lián)樣式問題

    Vue綁定內(nèi)聯(lián)樣式問題

    這篇文章主要介紹了Vue綁定內(nèi)聯(lián)樣式的相關知識,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-10-10
  • vue中使用input[type=

    vue中使用input[type="file"]實現(xiàn)文件上傳功能

    這篇文章主要介紹了vue中使用input[type="file"]實現(xiàn)文件上傳功能,實現(xiàn)代碼簡單易懂,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-09-09
  • Vue3使用video-player實現(xiàn)視頻播放

    Vue3使用video-player實現(xiàn)視頻播放

    video-player是一個基于video.js的視頻播放器組件,本文主要介紹了Vue3使用video-player實現(xiàn)視頻播放,具有一定的參考價值,感興趣的可以了解一下
    2024-01-01
  • Nuxt3重點特性使用舉例問題記錄

    Nuxt3重點特性使用舉例問題記錄

    Nuxt3?使用?Vue.js?作為視圖引擎,Nuxt3?中提供了所有?Vue?3?功能,所以我們創(chuàng)建的Nuxt項目其實也是vue3項目,這篇文章主要介紹了Nuxt3重點特性使用舉例記錄,需要的朋友可以參考下
    2022-12-12

最新評論