在 Vue 项目中使用 SQLite 数据库的基础应用

目录

  • 一、环境准备
  • 二、数据库连接与操作
    • [1. 创建数据库连接](#1. 创建数据库连接)
    • [2. 创建表](#2. 创建表)
    • [3. 插入数据](#3. 插入数据)
    • [4. 查询数据](#4. 查询数据)
    • [5. 更新数据](#5. 更新数据)
    • [6. 删除数据](#6. 删除数据)
  • [三、在 Vue 组件中使用 SQLite](#三、在 Vue 组件中使用 SQLite)

一、环境准备

安装 Node.js 和 npm:确保已安装 Node.js 和 npm。

创建 Vue 项目:使用 Vue CLI 创建一个新的 Vue 项目:

javascript 复制代码
vue create vue-sqlite-project

安装 SQLite 驱动:在项目中安装 sqlite3 库:

javascript 复制代码
npm install sqlite3

二、数据库连接与操作

1. 创建数据库连接

在 Vue 组件中,可以使用 sqlite3 模块连接 SQLite 数据库:

javascript 复制代码
import sqlite3 from 'sqlite3';

const db = new sqlite3.Database('./database.db', (err) => {
  if (err) {
    console.error(err.message);
  }
  console.log('Connected to the SQLite database.');
});

2. 创建表

使用 SQL 语句创建表:

javascript 复制代码
db.run(`CREATE TABLE IF NOT EXISTS users (
  id INTEGER PRIMARY KEY AUTOINCREMENT,
  username TEXT NOT NULL,
  email TEXT NOT NULL
)`, (err) => {
  if (err) {
    console.error(err.message);
  }
  console.log('Table created.');
});

3. 插入数据

插入数据到表中:

javascript 复制代码
const user = { username: 'Alice', email: 'alice@example.com' };
db.run(`INSERT INTO users (username, email) VALUES (?, ?)`, [user.username, user.email], (err) => {
  if (err) {
    console.error(err.message);
  }
  console.log('A row has been inserted.');
});

4. 查询数据

查询表中的数据:

javascript 复制代码
db.all(`SELECT * FROM users`, [], (err, rows) => {
  if (err) {
    console.error(err.message);
  }
  rows.forEach((row) => {
    console.log(row);
  });
});

5. 更新数据

更新表中的数据:

javascript 复制代码
db.run(`UPDATE users SET email = ? WHERE username = ?`, ['newemail@example.com', 'Alice'], (err) => {
  if (err) {
    console.error(err.message);
  }
  console.log('A row has been updated.');
});

6. 删除数据

删除表中的数据:

javascript 复制代码
db.run(`DELETE FROM users WHERE username = ?`, ['Alice'], (err) => {
  if (err) {
    console.error(err.message);
  }
  console.log('A row has been deleted.');
});

三、在 Vue 组件中使用 SQLite

以下是一个完整的 Vue 组件示例,展示如何在组件中实现对 SQLite 数据库的增删改查操作:

javascript 复制代码
<template>
  <div>
    <h2>User Management</h2>
    <form @submit.prevent="addUser">
      <input v-model="newUser.username" placeholder="用户名" />
      <input v-model="newUser.email" placeholder="邮箱" />
      <button type="submit">添加用户</button>
    </form>
    <ul>
      <li v-for="user in users" :key="user.id">
        {{ user.username }} - {{ user.email }}
        <button @click="deleteUser(user.id)">删除用户</button>
      </li>
    </ul>
  </div>
</template>

<script>
import sqlite3 from 'sqlite3';

export default {
  data() {
    return {
      newUser: { username: '', email: '' },
      users: []
    };
  },
  methods: {
    async initDatabase() {
      const db = new sqlite3.Database('./database.db', (err) => {
        if (err) {
          console.error(err.message);
        }
        console.log('Connected to the SQLite database.');
      });

      // Create table
      db.run(`CREATE TABLE IF NOT EXISTS users (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        username TEXT NOT NULL,
        email TEXT NOT NULL
      )`, (err) => {
        if (err) {
          console.error(err.message);
        }
        console.log('Table created.');
      });

      // Fetch users
      this.fetchUsers(db);

      // Close database connection
      db.close();
    },
    fetchUsers(db) {
      db.all(`SELECT * FROM users`, [], (err, rows) => {
        if (err) {
          console.error(err.message);
        }
        this.users = rows;
      });
    },
    addUser() {
      const db = new sqlite3.Database('./database.db');
      db.run(`INSERT INTO users (username, email) VALUES (?, ?)`, [this.newUser.username, this.newUser.email], (err) => {
        if (err) {
          console.error(err.message);
        }
        console.log('User added.');
        this.fetchUsers(db);
      });
      db.close();
    },
    deleteUser(id) {
      const db = new sqlite3.Database('./database.db');
      db.run(`DELETE FROM users WHERE id = ?`, [id], (err) => {
        if (err) {
          console.error(err.message);
        }
        console.log('User deleted.');
        this.fetchUsers(db);
      });
      db.close();
    }
  },
  mounted() {
    this.initDatabase();
  }
};
</script>
相关推荐
WeiQ_6 小时前
解决phpstudy 8.x软件中php8.2.9没有redis扩展的问题
数据库·redis·缓存
DashVector10 小时前
向量检索服务 DashVector产品计费
数据库·数据仓库·人工智能·算法·向量检索
KYGALYX11 小时前
在Linux中备份msyql数据库和表的详细操作
linux·运维·数据库
檀越剑指大厂11 小时前
金仓KReplay:定义数据库平滑迁移新标准
数据库
努力成为一个程序猿.12 小时前
【Flink】FlinkSQL-动态表和持续查询概念
大数据·数据库·flink
毕设十刻12 小时前
基于Vue的学分预警系统98k51(程序 + 源码 + 数据库 + 调试部署 + 开发环境配置),配套论文文档字数达万字以上,文末可获取,系统界面展示置于文末
前端·数据库·vue.js
liliangcsdn13 小时前
如何利用约束提示优化LLM在问题转sql的一致性
数据库·sql
Java爱好狂.14 小时前
分布式ID|从源码角度深度解析美团Leaf双Buffer优化方案
java·数据库·分布式·分布式id·es·java面试·java程序员
Elastic 中国社区官方博客14 小时前
通过混合搜索重排序提升多语言嵌入模型的相关性
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索
倔强的石头10615 小时前
KingbaseES:从兼容到超越,详解超越MySQL的权限隔离与安全增强
数据库·mysql·安全·金仓数据库