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