uniapp整合SQLite(Android)

news/2025/3/22 21:02:54/

一. 在uni-app项目中, 链接SQLite

前端开发人员 应特殊需求, 需通过链接SQLite(关系型数据库) ,存储大量数据在Android/ios上

在项目中勾选此选项,确保相关权限

 二、代码实现

<template><view class="content"><image class="logo" src="@/static/logo.png"></image><view class="text-area"><text class="title">I fine</text></view></view>
</template><script>
export default {async onLoad() {try {// 1. 打开数据库await this.openDB();// 2. 检查表是否存在(调试用)await this.debugShowTables();// 3. 建表await this.createTable();// 4. 显式事务插入数据await this.insertWithTransaction();// 5. 查询验证await this.selectSQL();// 6. 主动关闭数据库(重要!)await this.closeDB();} catch (error) {console.error('初始化失败:', error);}},methods: {// 打开数据库(强化错误处理)openDB() {return new Promise((resolve, reject) => {plus.sqlite.openDatabase({name: 'first',path: '_doc/hello.db',success: (e) => {console.log('✅ 数据库连接成功',e);resolve();},fail: (e) => {console.error('❌ 连接失败:', e);reject(`连接失败: ${JSON.stringify(e)}`);}});});},// 创建表(增加IF NOT EXISTS)async createTable() {try {await this.executeSql(`CREATE TABLE IF NOT EXISTS locations (id INTEGER PRIMARY KEY AUTOINCREMENT,address TEXT NOT NULL,area TEXT,age INTEGER DEFAULT 0)`);console.log('✅ 表创建成功');} catch (e) {throw new Error(`建表失败: ${e}`);}},// 使用显式事务插入async insertWithTransaction() {try {await this.executeSql('BEGIN TRANSACTION');await this.executeSql(`INSERT INTO locations (address, area, age) VALUES ('北京', '安乐林', 11)`);await this.executeSql(`INSERT INTO locations (address, area, age) VALUES ('上海', '浦东新区', 23)`);await this.executeSql('COMMIT');console.log('✅ 事务提交成功');} catch (e) {await this.executeSql('ROLLBACK');throw new Error(`事务失败: ${e}`);}},// 查询方法(增强调试)async selectSQL() {try {const data = await this.selectSql('SELECT * FROM locations');console.log('🔍 查询结果:', JSON.stringify(data, null, 2));} catch (e) {throw new Error(`查询失败: ${e}`);}},// 关闭数据库(新增方法)closeDB() {return new Promise((resolve) => {plus.sqlite.closeDatabase({name: 'first',success: () => {console.log('🗃️ 数据库已关闭');resolve();},fail: (e) => {console.warn('关闭数据库异常:', e);resolve(); // 即使失败也继续}});});},// 调试:显示所有表(新增方法)async debugShowTables() {try {const tables = await this.selectSql("SELECT name FROM sqlite_master WHERE type='table'");console.log('📑 当前数据库表:', tables);} catch (e) {console.warn('表查询失败:', e);}},// 通用SQL执行(保持原样)executeSql(sql) {return new Promise((resolve, reject) => {plus.sqlite.executeSql({name: 'first',sql: sql, // 强制刷新 Write-Ahead Loggingsuccess: () => {console.log('强制刷新日志成功')resolve()},fail: (e) => {console.error('刷新失败:', e)reject()}});});},// 通用查询(保持原样)selectSql(sql) {return new Promise((resolve, reject) => {plus.sqlite.selectSql({name: 'first',sql: sql,success: (data) => resolve(data),fail: (e) => reject(JSON.stringify(e))});});}}
}
</script>
<style>.content {display: flex;flex-direction: column;align-items: center;justify-content: center;}.logo {height: 200rpx;width: 200rpx;margin-top: 200rpx;margin-left: auto;margin-right: auto;margin-bottom: 50rpx;}.text-area {display: flex;justify-content: center;}.title {font-size: 36rpx;color: #8f8f94;}
</style>

控制台输出 ,我们可以看到执行日志

最佳方案,是把代码封装到一个公共库,需要增删改查数据 直接调用指定方法即可 , 有其他好的建议欢迎指导, 交流前端相关技术 

有需要可视化预览 Sqlite中的数据表, 可看下一章ADB工具实现

可视化预览Sqlite数据文章浏览阅读86次。adb(Android Debug Bridge)是Android开发中常用的一个工具,它允许开发者通过电脑与Android设备进行通信。如果你想通过adb导出手机上的文件,你可以按照以下步骤业务需求: 前端通过使用uni-appsqlite(关系型数据库系统) ,存储了大量的机密数据在手机上, 直接通过代码读取,体验感不够直观, 于是就产生了可视化预览数据的需求1. 开启USB调试确保你的Android设备已经开启了USB调试模式。你可以在“设置” -> “开发者选项”中开启它。 https://blog.csdn.net/m0_71071209/article/details/146414320


http://www.ppmy.cn/news/1581226.html

相关文章

Flask实时监控:打造智能多设备在线离线检测平台(升级版)

前言 武林之中&#xff0c;最讲究的便是“掌控”。若是手下弟子忽然失踪&#xff0c;若是江湖好友生死未卜&#xff0c;岂不令人寝食难安&#xff1f;今日&#xff0c;吾等化身技术侠客&#xff0c;祭出Flask实时监控大法&#xff0c;打造一款智能多设备在线离线检测平台&…

如何生成汽车二维码?从应用到生成的实用指南

无论是在新车销售、售后服务还是车队管理中&#xff0c;汽车二维码都展现了巨大的应用潜力。本文将深入探讨汽车二维码的实际应用场景及生成方法&#xff0c;帮助您更全面地了解这一智能工具。 汽车二维码的实际应用场景 1. 车辆展示信息数字化 汽车展厅和经销商使用汽车二维…

1.7 无穷小的比较

1.定义 2.性质 3.无穷小的比较 3.1等价无穷小的性质 3.2 常见等价无穷小

ffmpeg库视频硬编码使用流程

‌一、硬件编码核心流程‌ ‌硬件设备初始化 // 创建CUDA硬件设备上下文‌ AVBufferRef *hw_device_ctx NULL; av_hwdevice_ctx_create(&hw_device_ctx, AV_HWDEVICE_TYPE_CUDA, NULL, NULL, 0);// 绑定硬件设备到编码器上下文‌ codec_ctx->hw_device_ctx av_buffer_…

使用Three.js渲染器创建炫酷3D场景

引言 在当今数字化的时代&#xff0c;3D图形技术正以其独特的魅力在各个领域掀起波澜。从影视制作到游戏开发&#xff0c;从虚拟现实到网页交互&#xff0c;3D场景以其强烈的视觉冲击力和沉浸式的体验&#xff0c;成为了吸引用户、传达信息的重要手段。而Three.js&#xff0c;…

Walrus 基金会完成 1.4 亿美元融资,由 Standard Crypto 领投

Walrus 基金会 — — 致力于推动 Walrus 发展与增长的组织&#xff0c;3 月 20 日宣布完成 1.4 亿美元的私募。 本轮融资由 Standard Crypto 领投&#xff0c;a16z crypto、Electric Capital、Lvna Capital、Protagonist、Franklin Templeton Digital Assets、Karatage、RW3 …

音视频学习(二十九):YUV与RGB

YUV 和 RGB 是两种不同的颜色表示方式&#xff0c;主要用于图像和视频处理。 1. RGB 颜色空间 RGB&#xff08;Red, Green, Blue&#xff09;是基于加色原理的颜色空间&#xff0c;每种颜色由红、绿、蓝三种基本色按不同的比例混合得到&#xff0c;常用于显示设备&#xff08…

荣耀手机卸载应用商店、快应用中心等系统自带的

1.下载abd ADB Download - Get the latest version of ADB and fastboot 2.手机打开开发者选项 3.手机接电脑打开USB调试 4.下载MT管理器查看系统包名 D:\1.LFD\ADB\platform-tools-latest-windows\platform-tools>adb shell adb.exe: no devices/emulators found 这边是…