当前位置: 首页 > article >正文

vue3+vite+SQL.js 读取db3文件数据

前言:好久没写博客了,最近一直在忙,没时间梳理。最近遇到一个需求是读取本地SQLite文件,还是花费了点时间才实现,没怎么看到vite方面写这个的文章,现在分享出来完整流程。

1.pnpm下载SQL.js(什么都可以下)

pnpm add SQL.js

2.【重点】如果你执行wasm文件时报错404,请执行:

pnpm add --save-dev @rollup/plugin-wasm

在vite.config,js中写入:

...
   build: {
    	rollupOptions: {
        plugins: [
          // 在这里添加 wasm 插件
          wasm({
            include: /\.wasm$/i // 这里可能需要调整为你的文件路径和名称
          })
        ],
	}
}
...

3.在使用的页面中,你需要引入了,但是我在使用setup语法糖写法时候报错,因为执行顺序的问题,这里有两种解决办法;
第一种:不使用语法糖,使用setup()形式;
第二种:使用语法糖,结合onMounted,nextTick解决,以下:

import { onMounted, nextTick, ref } from "vue";
import initSqlJs from "sql.js";
const databaseContent = ref(null);
let SQL, db;
onMounted(async (nextTick) => {
  SQL = await initSqlJs({
    locateFile: (file) => `/node_modules/sql.js/dist/${file}`
  });
  db = new SQL.Database();
});

4.添加选择文件控件,选择.db3文件,触发onFileChange 方法

 <input type="file" @change="onFileChange" />
    <div>
      <ul>
        <li v-for="(item, index) in databaseContent" :key="index">
          {{ item }}
        </li>
      </ul>
    </div>

const onFileChange = (event) => {
  const fileInput = event.target;
  const file = fileInput.files[0];

  if (file) {
    const reader = new FileReader();
    reader.onload = () => {
      const Uints = new Uint8Array(reader.result);
      db = new SQL.Database(Uints);
      const result = db.exec("SELECT PhotoFile  FROM Photo");
      if (result && result.length) {
        let table = result[0].values.flat().map((str) => {
          let newRow = str.replace(".\\", "");
          let newOvrRow = newRow + ".ovr";
          return [newRow, newOvrRow];
        });
        databaseContent.value = table.flat();
      }
    };
    reader.readAsArrayBuffer(file);
  }
};

主要是这几句:

 const Uints = new Uint8Array(reader.result);
  db = new SQL.Database(Uints);
  const result = db.exec("SELECT PhotoFile  FROM Photo");
  ...
  reader.readAsArrayBuffer(file);

这是db3数据库的结构:

在这里插入图片描述
我取其中的PhotoFile值(.ovr不用看,我自己加的):
在这里插入图片描述


http://www.kler.cn/news/136450.html

相关文章:

  • 【JAVA】第三张_Eclipse下载、安装、汉化
  • kubeadm快速自动化部署k8s集群
  • DSPy:不需要手写prompt啦,You Only Code Once!
  • 量子纠错--shor‘s 码
  • NavMesh只制作可移动的导航网,清除多余不可走区域
  • 信息安全工程师(55)网络安全漏洞概述
  • 汽车标定技术--A2L格式分析
  • 解决Requests中使用httpbin服务器问题:自定义URL的实现与验证
  • sql添加索引
  • C++多线程编程:其六、unique_lock的使用
  • 【寒武纪(14)】硬件系统由标量指令、向量指令、张量指令、访存指令构成
  • BUUCTF [BJDCTF2020]一叶障目 1
  • 在服务器上部署MVC 6应用程序
  • 关于使用宝塔页面Nginx的一些注意事项:Nginx不生效情况,以及解决方案
  • 11.20 知识总结(choices参数、MVC和MTV的模式、Django与Ajax技术)
  • NameServer源码解析
  • milvus采坑一:启动服务就会挂掉
  • HashMap的详细解读
  • Vue3--Vue Router详解--学习笔记
  • Vue使用基本教程(基本介绍及对比,初步使用,构建项目,编辑器等)
  • 云计算赛项容器云2023搭建
  • Conditional GAN
  • Python如何将项目直接打包为一键整合包
  • C语言--给定一行字符串,获取其中最长单词【图文详解】
  • 记GitLab服务器迁移后SSH访问无法生效的问题解决过程
  • NX二次开发UF_CAM_ask_lower_limit_plane_status 函数介绍