欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 美景 > uniapp整合SQLite(Android)

uniapp整合SQLite(Android)

2025/3/25 17:46:18 来源:https://blog.csdn.net/m0_71071209/article/details/146416123  浏览:    关键词:uniapp整合SQLite(Android)

一. 在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-app 的sqlite(关系型数据库系统) ,存储了大量的机密数据在手机上, 直接通过代码读取,体验感不够直观, 于是就产生了可视化预览数据的需求1. 开启USB调试确保你的Android设备已经开启了USB调试模式。你可以在“设置” -> “开发者选项”中开启它。 https://blog.csdn.net/m0_71071209/article/details/146414320

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词