背景:利用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
