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

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.lryc.cn/news/237115.html

相关文章:

  • 微信小程序 限制字数文本域框组件封装
  • 阿里国际站(直通车)
  • C# GC机制
  • wpf devexpress在未束缚模式中生成Tree
  • Python利器:os与chardet读取多编码文件
  • 微服务和注册中心
  • 吴恩达《机器学习》9-1-9-3:反向传播算法、反向传播算法的直观理解
  • Java 算法篇-链表的经典算法:判断回文链表、判断环链表与寻找环入口节点(“龟兔赛跑“算法实现)
  • 【JS】Chapter13-构造函数数据常用函数
  • 06-流媒体-YUV数据在SDL控件显示
  • 对象和数据结构
  • ESP32-BLE基础知识
  • vscode终端npm install报错
  • 雪花算法的使用
  • flink源码分析之功能组件(一)-metrics
  • Nginx反向代理和负载均衡
  • 基于SSM的供电公司安全生产考试系统设计与实现
  • 大数据-之LibrA数据库系统告警处理(ALM-12055 证书文件即将过期)
  • 应试教育导致学生迷信标准答案惯性导致思维僵化-移动机器人
  • 【运维篇】5.4 Redis 并发延迟检测
  • 碰到一个逆天表中表数据渲染
  • 记录我常用的免费API接口
  • 编程的简单实例,编程零基础入门教程,中文编程开发语言工具下载
  • 创芯科技USB_CAN【库文件】
  • React整理总结(四)
  • ajax,axios,fetch
  • Java值传递和引用传递
  • FPGA_IIC代码-正点原子 野火 小梅哥 特权同学对比写法(1)
  • LabVIEW编程开发NI-USRP
  • ES6中实现继承