典型案例库建设:积累高质量输入输出对供研究参考
2026/1/6 9:30:53
推荐使用uni-sqlite插件,该插件对原生SQLite进行了封装,提供了统一的API接口:
安装步骤:
在项目根目录创建common/sqlite.js文件,封装常用数据库操作方法:
const dbName = "myDatabase"; // 数据库名称 const dbPath = "_doc/myDatabase.db"; // 存储路径 // 打开数据库 export function openDatabase() { return new Promise((resolve, reject) => { plus.sqlite.openDatabase({ name: dbName, path: dbPath, success: function(e) { console.log('数据库打开成功'); resolve(e); }, fail: function(e) { console.error('数据库打开失败:', JSON.stringify(e)); reject(e); } }); }); } // 检查数据库是否打开 export function isOpenDatabase() { return plus.sqlite.isOpenDatabase({ name: dbName, path: dbPath }); } // 执行SQL语句 export function executeSql(sql, args = []) { return new Promise((resolve, reject) => { plus.sqlite.executeSql({ name: dbName, sql: sql, args: args, success: function(e) { resolve(e); }, fail: function(e) { reject(e); } }); }); } // 查询数据 export function selectSql(sql, args = []) { return new Promise((resolve, reject) => { plus.sqlite.selectSql({ name: dbName, sql: sql, args: args, success: function(e) { resolve(e); }, fail: function(e) { reject(e); } }); }); } // 关闭数据库 export function closeDatabase() { return new Promise((resolve, reject) => { plus.sqlite.closeDatabase({ name: dbName, success: function(e) { resolve(e); }, fail: function(e) { reject(e); } }); }); }在应用启动时初始化数据库:
// 在App.vue的onLaunch中初始化 import { openDatabase, executeSql } from '@/common/sqlite.js'; export default { onLaunch() { this.initDatabase(); }, methods: { async initDatabase() { try { // 打开数据库 await openDatabase(); // 创建用户表 await executeSql(` CREATE TABLE IF NOT EXISTS users ( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, email TEXT UNIQUE, age INTEGER, created_at DATETIME DEFAULT CURRENT_TIMESTAMP ) `); console.log('数据库初始化成功'); } catch (error) { console.error('数据库初始化失败:', error); } } } }async function insertUser(user) { try { const result = await executeSql( 'INSERT INTO users (name, email, age) VALUES (?, ?, ?)', [user.name, user.email, user.age] ); console.log('插入成功,ID:', result.insertId); return result.insertId; } catch (error) { console.error('插入失败:', error); throw error; } }// 查询所有用户 async function getAllUsers() { try { const result = await selectSql('SELECT * FROM users'); return result; } catch (error) { console.error('查询失败:', error); throw error; } } // 条件查询 async function getUserById(id) { try { const result = await selectSql( 'SELECT * FROM users WHERE id = ?', [id] ); return result.length > 0 ? result[0] : null; } catch (error) { console.error('查询失败:', error); throw error; } }async function updateUser(id, user) { try { const result = await executeSql( 'UPDATE users SET name = ?, email = ?, age = ? WHERE id = ?', [user.name, user.email, user.age, id] ); console.log('更新成功,影响行数:', result.rowsAffected); return result.rowsAffected; } catch (error) { console.error('更新失败:', error); throw error; } }async function deleteUser(id) { try { const result = await executeSql( 'DELETE FROM users WHERE id = ?', [id] ); console.log('删除成功,影响行数:', result.rowsAffected); return result.rowsAffected; } catch (error) { console.error('删除失败:', error); throw error; } }async function transferMoney(fromId, toId, amount) { try { // 开始事务 await executeSql('BEGIN TRANSACTION'); // 扣款 await executeSql( 'UPDATE accounts SET balance = balance - ? WHERE id = ?', [amount, fromId] ); // 收款 await executeSql( 'UPDATE accounts SET balance = balance + ? WHERE id = ?', [amount, toId] ); // 提交事务 await executeSql('COMMIT'); console.log('转账成功'); } catch (error) { // 回滚事务 await executeSql('ROLLBACK'); console.error('转账失败:', error); throw error; } }<template> <view> <button @click="addUser">添加用户</button> <button @click="getUsers">查询用户</button> <view v-for="user in userList" :key="user.id"> {{ user.name }} - {{ user.email }} </view> </view> </template> <script> import { insertUser, getAllUsers } from '@/common/sqlite.js'; export default { data() { return { userList: [] }; }, methods: { async addUser() { const user = { name: '张三', email: 'zhangsan@example.com', age: 25 }; try { await insertUser(user); uni.showToast({ title: '添加成功' }); } catch (error) { uni.showToast({ title: '添加失败', icon: 'none' }); } }, async getUsers() { try { this.userList = await getAllUsers(); } catch (error) { console.error('查询失败:', error); } } } }; </script>通过以上步骤,你可以在UniApp项目中成功集成SQLite数据库,实现本地数据的持久化存储和高效操作。