ionic保存到mysql_ionic sqlite 存取數據封裝(兼容真機與webkit瀏覽器)

不管是真機還是H5,都有提供sqlite數據庫進行存儲數據。那么我們只要封裝好函數就能隨意調用了。

如果只是存儲簡單的鍵值對形式的話,ionic官網也提供了一個兼容網頁的storage,https://ionicframework.com/docs/storage,但只能key/value ,當然value可以是Json。

但是很多時候為了前后端數據保存一致,所以前端也采用多字段存儲,那么只能自己封裝函數處理了。

*如果websql支持的瀏覽器無法滿足自己的需求,請使用IndexedDB

1. 安裝數據庫操作插件

$ ionic cordova plugin add cordova-sqlite-storage

$ npm install --save @ionic-native/sqlite

所有的原生插件和自定義provider都要在app.module的providers中聲明

import { SQLite } from '@ionic-native/sqlite';

@NgModule({

declarations: [

MyApp

],

imports: [

HttpModule,

JsonpModule,

BrowserModule,

IonicModule.forRoot(MyApp, {

})

],

bootstrap: [IonicApp],

entryComponents: [

MyApp

],

providers: [

SQLite

]

})

export class AppModule { }

2. 封裝調用函數

控制臺輸入命令創建provider

$ ionic g provider native

執行后目錄如下:

0116e6a8a4f2?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

1.png

填入//異步問題進行修改

import { SQLite, SQLiteObject } from '@ionic-native/sqlite';

import { Injectable } from '@angular/core';

import { Platform , Events } from 'ionic-angular';

import { StorageServiceProvider } from '../../providers/storage-service/storage-service';

@Injectable()

export class NativeProvider {

database: SQLiteObject;

win_db: any;//H5數據庫對象

win: any = window;//window對象

constructor( private platform: Platform,

private sqlite: SQLite,

private events: Events,

private storage: StorageServiceProvider) { }

/**

* 創建數據庫

*/

createDb() {

if (this.isMobile()) {

this.sqlite.create({

name: 'data.db',

location: 'default'

})

.then((db: SQLiteObject) => {

this.database = db;

//創建表如果已存在就創建

if (this.storage.read('db:create') != "Yes") {

//創建表

this.createTable();

} else {

this.events.publish('db:create');

}

})

.catch(e => {

this.showAlert(this.text.CREATE_DB);

this.events.publish('db:create');

});

} else {

//H5數據庫存儲,注意測試瀏覽器兼容,websql w3c沒維護

try {

this.win_db = this.win.openDatabase("data.db", '1.0', 'database', 5 * 1024 * 1024);//聲明H5 數據庫大小

this.createTable();

} catch (err) {

console.log('創建數據庫失敗')

}

}

}

/**

* 創建表

*/

async createTable() {

// this.querySql('', []);

//可能存在多個執行創建表語句,只需最后一個使用await

await this.executeSql('CREATE TABLE remindMaster(remind_id INTEGER PRIMARY KEY AUTOINCREMENT,user_id TEXT,state TEXT , content TEXT,remind_time TEXT,create_time TEXT)', []);

this.events.publish('db:create');

this.storage.write('db:create', "Yes");

}

/**

* 執行語句

*/

executeSql(sql: string, array: Array): Promise {

return new Promise((resolve, reject) => {

if (this.isMobile()) {

if (!!!!this.database) {

this.database.executeSql(sql, array).then((data) => {

resolve(data);

}, (err) => {

reject(err);

console.log('Unable to execute sql: ' + err);

});

} else {

return new Promise((resolve) => {

resolve([]);

});

}

} else {

if (this.win_db) {

return this.execWebSql(sql, array).then(data => {

resolve(data);

}).catch(err => {

console.log(err);

});

}

}

});

}

/**

* 查詢H5數據庫

*/

execWebSql(sql: string, params: Array): Promise {

return new Promise((resolve, reject) => {

try {

this.win_db.transaction((tx) => {

tx.executeSql(sql, params,

(tx, res) => resolve(res),

(tx, err) => reject(err));

},

(err) => reject(err));

} catch (err) {

reject(err);

}

});

}

/**

* 是否真機環境

* @return {boolean}

*/

isMobile(): boolean {

return this.platform.is('mobile') && !this.platform.is('mobileweb');

}

}

3. 調用

刪除app.html里的默認root屬性

0116e6a8a4f2?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

圖片.png

在程序初始化的時候調用創建數據庫(即app.component.ts里)

constructor(

private statusBar: StatusBar,

private splashScreen: SplashScreen,

private nativeProvider: NativeProvider) {

platform.ready().then(() => {

// Okay, so the platform is ready and our plugins are available.

// Here you can do any higher level native things you might need.

this.init();//初始化

});

}

init(){

//確保異步執行完后才隱藏啟動動畫

this.events.subscribe('db:create', () => {

//創建數據庫與表成功后才關閉動畫跳轉頁面

this.statusBar.styleDefault();

this.splashScreen.hide();

this.nav.setRoot(TabsPage);

})

//初始化創建數據庫

this.nativeProvider.createDb();

}

在所需頁面引入調用即可

//插入數據

this.nativeProvider.executeSql('INSERT INTO remindMaster(user_id,state,content,remind_time,create_time) VALUES (?,?,?,?,?)',

['1', '0', 'haha', '2017-12-14', new Date().getTime().toString()]);

//查詢數據

//如果使用直接拼接sql查詢,需要注意參數加 '',否則真機sqlite查看不到數據 例如:(`SELECT remind_id,state,user_id,content,remind_time,create_time FROM remindMaster WHERE state='0' AND user_id = '${user_id }' ORDER BY remind_time ASC`, []

this.nativeProvider.executeSql('SELECT remind_id,state,user_id,content,remind_time,create_time FROM remindMaster WHERE state=? AND user_id = ? ORDER BY remind_time ASC', ['0','1']).then(data => {

if (!!!!data && !!!!data.rows && data.rows.length > 0) {

for (let i = 0; i < data.rows.length; i++) {

console.log(data.rows.item(i));

}

}

});

4. 瀏覽器查看

0116e6a8a4f2?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

image.png

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/534226.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/534226.shtml
英文地址,請注明出處:http://en.pswp.cn/news/534226.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

sql plus 表的總記錄數是多少_直播回顧 | 億級并發絲毫不虛,TDSQL-SQL引擎是如何煉成的...

騰訊云數據庫國產數據庫專題線上技術沙龍正在火熱進行中&#xff0c;3月19日唐顥的分享已經結束&#xff0c;沒來得及參與的小伙伴不用擔心&#xff0c;以下就是直播的視頻和文字回顧。關注“騰訊云數據庫”公眾號&#xff0c;回復“0319唐顥”&#xff0c;即可下載直播分享PPT…

java plug機制_插件機制 - OpooPress - 基于 Java 的靜態博客生成器

插件機制通過插件機制可以很容易的擴展 OpooPress 博客系統的功能。 Plugin 定義如下public interface Plugin{/**** param registry*/void initialize(Registry registry);}Registry 接口定義如下&#xff1a;public interface Registry {Site getSite();void registerConvert…

運放放大倍數計算公式_19.運算放大器的特性與應用,不得不掌握的知識點(一)...

運算放大器&#xff0c;簡稱“運放”&#xff0c;是電力電子中最重要的器件之一&#xff0c;主要作用為&#xff1a;信號放大、信號運算、信號處理、波形的產生和變換。一、運算放大器的內部結構集成運算放大器內部結構集成運算放大器內部一般由四個單元組成&#xff0c;各單元…

java選項設置_java環境配置

javac無法執行檢查&#xff1a;看看java 相關的java相關路徑有沒有多余的符號&#xff0c;比如多出分號&#xff0c;逗號(筆者上面是正確的路徑展示形式)Win10下 Java環境變量配置首先&#xff0c;你應該已經安裝了 Java 的 JDK 了(如果沒有安裝JDK&#xff0c;請跳轉到此網址&…

teleport 組件的作用_人臉識別綜述! 覆蓋人臉檢測,預處理和特征表示三大核心組件!...

The Elements of End-to-end Deep Face Recognition: A Survey of Recent Advances 人臉識別是計算機視覺社區中最基礎和歷史悠久的話題之一。隨著深度卷積網絡和大尺度數據集發展&#xff0c;深度人臉識別取得極大進步并且應用到許多領域。給定一個自然圖像或者視頻幀作為輸入…

itunes未能連接到iphone_iTunes下載_蘋果iTunes官方下載「32位|64位」

iTunes是蘋果官方推出的Apple官方數字媒體播放與管理應用程序。蘋果iTunes官方下載中文版能將您所有的媒體文件和應用收藏導入iPad和iPhone&#xff0c;您還可以通過它購買應用、數字音樂、視頻、電視及游戲等等。iTunes是目前最專業的iPad和iPhone管理應用工具。本站提供蘋果i…

java短視頻上傳阿里云流程_短視頻上傳

啟動上傳前需要設置上傳回調&#xff0c;需要實現VODSVideoUploadCallback回調&#xff1a;vodsVideoUploadClient.uploadWithVideoAndImg(vodSessionCreateInfo, new VODSVideoUploadCallback() {Overridepublic void onUploadSucceed(String videoId, String imageUrl) {//上…

feko軟件_計算電磁學各種方法和電磁仿真軟件簡述

計算電磁學中有眾多不同的算法&#xff0c;如時域有限差分法(FDTD)、時域有限積分法(FITD)、有限元法(FE)、矩量法(MoM)、邊界元法(BEM)、 譜域法(SM)、傳輸線法(TLM)、模式匹配法(MM)、橫向諧振法(TRM)、線方法(ML)和解析法等等。在頻域&#xff0c;數值算法有&#xff1a;有限…

出租車管理系統java_基于jsp的出租車管理系統-JavaEE實現出租車管理系統 - java項目源碼...

基于jspservletpojomysql實現一個javaee/javaweb的出租車管理系統, 該項目可用各類java課程設計大作業中, 出租車管理系統的系統架構分為前后臺兩部分, 最終實現在線上進行出租車管理系統各項功能,實現了諸如用戶管理, 登錄注冊, 權限管理等功能, 并實現對各類出租車管理系統相…

cad常青藤插件_原來還有這么好用的CAD插件,半小時就能做完一張圖

作為一名優秀的設計師或者建筑師&#xff0c;如果你沒用過逆天的CAD插件&#xff0c;我覺得不行&#xff0c;所以下面小編就給大家推薦幾個非常好用的CAD插件&#xff0c;希望可以幫助大家大幅提升工作效率。接下來小編就帶大家一起看看吧&#xff01;1、天正建筑天正建筑顧名思…

java 停止線程播放音頻_Notification?播放?關閉?聲音----轉載

NotificationPlayer.java定義一個播放Notification聲音的player&#xff0c;本質上仍然是一個MediaPlayer&#xff0c;這個是多線程編程的很好的例子public class NotificationPlayer implements OnCompletionListener {//發送播放和停止的cmdprivate static final int PLAY 1…

java main是標識符嗎_main方法的認識 、通配符、java的注釋、java的符(標識符)【Java基礎】...

main方法的認識print()和println()的區別print()打印不換行println()打印并換行通配符\n換行符\t制表符都應用于控制臺\n換行\t以表格的形式顯示System.out.println("----------英雄排行榜------------");System.out.println("\t|編號\t|名字\t|戰力值\t|"…

對于半圓形的點擊區域該怎么做_十堰混合型塑膠跑道怎么選,橡膠跑道卷材型號...

河北邁弘體育設施有限公司為您詳細解讀hVgkXc十堰混合型塑膠跑道怎么選的相關知識與詳情&#xff0c;校園跑道、體育館田徑跑道等都是體育活動的首先場合。由于終年正在室外遭到風吹日曬&#xff0c;還要接受日常體育活動的摩擦、描寫、化學物量腐蝕或重物擠壓等因素&#xff0…

希望得到學術會議的及時回復該怎么說_張燁:在“選礦”博士的世界里,腳踏實地從來都不是說說而已!| 中南達人NO.188...

張燁資源加工與生物工程學院礦業工程2017級博士中南大學2019年大學生年度人物之一獲獎經歷(部分)2016年中南大學FMG獎勵金優秀學生獎2017年中南大學優秀畢業生2018年中南大學優秀學生2019年中南大學優秀學生博士研究生國家獎學金中南大學大學生年度人物2017-2019年博士一等學業…

java編寫一個集合類_Java集合類

數組是一種很常見的數據結構&#xff0c;開始接觸編程的時候多數程序都和數組相關。剛開始接觸Java時也是一直使用數組寫一些程序&#xff0c;后來越來越覺得數組這東西沒法滿足需求了&#xff0c;這時一位“前輩”對我說了一句&#xff1a;不會用集合類就等于沒學過Java。然后…

python 當前文件路徑獲取方式_Python獲取當前文件路徑

一. Python 獲取當前文件路徑方法2. sys.path[0]獲取文件當前工作目錄路徑(絕對路徑)sys.argv[0]|獲得模塊所在的路徑(由系統決定是否是全名)若顯示調用python指令&#xff0c;如python demo.py&#xff0c;會得到絕對路徑;若直接執行腳本&#xff0c;如./demo.py&#xff0c;會…

pdf不支持64位瀏覽器_4MLinux 31.0 發布,不支持32位

Zbigniew Konojacki宣布發布4MLinux 31.0&#xff0c;這是該項目極簡發行版的新穩定版本&#xff0c;專注于四個功能&#xff1a;維護(作為系統救援Live CD)&#xff0c;多媒體(用于播放視頻DVD和其他多媒體文件)&#xff0c;迷你服務器(使用inetd守護程序)和神秘的版本(提供幾…

java期末考試2013及答案_java筆試經典(題及答案)2013.doc

java筆試經典(題及答案)2013.doc Java筆試經典(基礎部分及答案和分析)1、一個“.java“源文件中是否可以包括多個類(不是內部類)&#xff1f;有什么限制&#xff1f;7答:可以包括多個類&#xff0c;但是最多只能有一個public修飾的類。2、Java有沒有goto?7答&#xff1a;java中…

datatables 行分組信息展開與折疊的功能實現_[LaTeX 嘗試] fancyvrb - 修復行引用的超鏈接跳轉位置

本文已加入專欄文章目錄&#xff0c;歸入「進階使用」文章系列。本文可以看作對這個發生于 2019 年 7 月中旬的 TeX-SX 上自問自答的展開說明。那個回答中避免了 python 的使用&#xff0c;而是利用 zref 宏包把位置信息以文本形式在 pdf 中呈現&#xff0c;好處是不用引入 pyt…

qtcreator攝像頭顯示時間_三星Galaxy S11 +渲染器展現出巨大的相機凹凸和四邊形曲面顯示...

我們正接近一年中三星宣布其Galaxy S系列最新設備的時間。Galaxy S10系列被認為是三星發布的最好的版本之一&#xff0c;因此在這方面他們有很多重要的事情。我們已經看到了Galaxy S11和Galaxy S11e的渲染&#xff0c;但是現在我們首先來看看Galaxy S11 。三星Galaxy S11 與其他…