UniAPP 利用sqlite保存数据
背景:利用uniapp开发一个APP,APP需要在断网的情况下,临时保存数据,把数据保存在uniapp的sqlite里面,这样可以随时的取到所保持的数据。
1.在uniapp的工程中需要添加sqlite数据库,如下图
2.在uniapp的共同组件中添加下面文件。
function openComDB(name, path, callback) { plus.sqlite.openDatabase({ name: name, path: path, success: function(e) { // plus.nativeUI.alert('打开数据库成功'); callback(e) }, fail: function(e) { // plus.nativeUI.alert("打开数据库失败"); callback(e); } }) } function executeSQL(name, sql, callback) { plus.sqlite.selectSql({ name: name, sql: sql, success: function(e) { // console.log("查询数据库:" + name + ",表:" + sql + ";的"); console.log("查询数据库:"+JSON.stringify(e)); callback(e); }, fail: function(e) { console.log("查询数据库失败:" + JSON.stringify(e)); callback(e); } }) } function closeComDB(name, path, callback) { plus.sqlite.closeDatabase({ name: name, path: path, success: function(e) { // plus.nativeUI.alert('打开数据库成功'); callback(e) }, fail: function(e) { // plus.nativeUI.alert("打开数据库失败"); callback(e); } }) } export { openComDB, closeComDB, executeSQL }
3.在需要调用sqlite的画面中,调用上面的方法
注:需要用真机模拟的形式来进行运行,否则会出现错误
import { openComDB, executeSQL, dropSQL } from '@/common/sqlite.js' export default { data() { return { } }, onLoad: function(option) { this.isOpenDB(); }, methods: { isOpenDB: function() { console.log('是否打开数据库'); var isOpen = plus.sqlite.isOpenDatabase({ name: getApp().globalData.dbName, //数据库的名字 path: getApp().globalData.dbPath //地址 }); console.log(!isOpen); if (!isOpen) { console.log('Unoepned:' + isOpen); // plus.nativeUI.alert('Unopened!'); this.openDB(); //打開DB } else { // plus.nativeUI.alert('Opened!'); // this.isNet(); // this.getLocalType(); this.dbInit(); } }, openDB: function() { //SQLite openComDB(getApp().globalData.dbName, getApp().globalData.dbPath, res => { console.log('打开数据库'); this.dbInit(); }); }, dbInit: function() { //创建建筑物类型表; var sqlTable = 'create table if not exists buildTable("id" INT(10) NOT NULL UNIQUE,"name" CHAR,"gridCode" CHAR)' executeSQL(getApp().globalData.dbName, sqlTable, res => { console.log('表创建成功:' + res); var sqlInsert = "insert into buildTable values('"; sqlInsert += 10 + "','"; sqlInsert += "XXX1" + "','"; sqlInsert += "00001" + "'"; sqlInsert += ')'; executeSQL(getApp().globalData.dbName, sqlInsert, res => {}) sqlInsert = "insert into buildTable values('"; sqlInsert += 11 + "','"; sqlInsert += "XXX2" + "','"; sqlInsert += "00002" + "'"; sqlInsert += ')'; executeSQL(getApp().globalData.dbName, sqlInsert, res => {}) executeSQL(getApp().globalData.dbName, 'select * from buildTable', res => { console.log("建筑物查询结果:" + JSON.stringify(res)); }) }) } } }
4.上面的添加之后,需要用安卓原生进行打包。
下载SDK:https://nativesupport.dcloud.net.cn/AppDocs/download/android
找到文件夹:Android-SDK@3.2.9.81057_20210927\SDK\libs\sqlite-release.aar 放到安卓原生的工程里面
添加可以引用上面的sqlite的包即可如下图
经试验,打包之后可以使用sqlite的
参考资料:
https://www.html5plus.org/doc/zh_cn/sqlite.html#plus.sqlite.transaction
https://www.freesion.com/article/42581053845/
https://uniapp.dcloud.io/api/storage/storage?id=clearstoragesync