国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【iOS】數(shù)據(jù)持久化(四)之FMDB基本使用

這篇具有很好參考價(jià)值的文章主要介紹了【iOS】數(shù)據(jù)持久化(四)之FMDB基本使用。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

正如我們前面所看到的,原生SQLite API在使用時(shí)還是比較麻煩的,于是,開(kāi)源社區(qū)就出現(xiàn)了一系列將SQLite API進(jìn)行封裝的庫(kù),其中FMDB的被大多數(shù)人所使用

FMDB和SQLite相比較,SQLite比較原始,操作比較復(fù)雜,使用的是C的函數(shù)對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作,但是SQLite可控性更強(qiáng),并且能夠跨平臺(tái),F(xiàn)MDB只能在iOS開(kāi)發(fā)中使用

cocoapods導(dǎo)入第三方庫(kù)FMDB

pod 'FMDB'

參考【iOS】JSONModel的基本使用


FMDB簡(jiǎn)介

FMDB是iOS開(kāi)發(fā)中的一個(gè)輕量級(jí)第三方數(shù)據(jù)庫(kù)框架,它以OC的方式封裝了SQLite的C語(yǔ)言接口,省去了麻煩的C語(yǔ)言代碼,且更加面向?qū)ο?,操作方?/p>

FMDB一般涉及以下3個(gè)核心類:

  • FMDatabase:此類的一個(gè)實(shí)例代表一個(gè)SQLite數(shù)據(jù)庫(kù),也有許多執(zhí)行SQL語(yǔ)句的方法
  • FMResultSet(結(jié)果集):使用FMDatabase執(zhí)行SQLite查詢語(yǔ)句后的結(jié)果集
  • FMDatabaseQueue(數(shù)據(jù)庫(kù)隊(duì)列):用于在多線程中執(zhí)行多個(gè)查詢或更新,它是線程安全的

FMDB基本使用

打開(kāi)數(shù)據(jù)庫(kù)

_dataBase = [FMDatabase databaseWithPath: @"/Users/Username/Desktop/CS/Xcode/FMDBTest/fmDb.sqlite"];
    
if (![_dataBase open]) {
    NSLog(@"打開(kāi)數(shù)據(jù)庫(kù)失??!");
} else {
    NSLog(@"%@", _dataBase.databasePath);
    }

//其他代碼
//...
[_dataBase close];
//通常打開(kāi)操作完成后,需要調(diào)用close方法來(lái)關(guān)閉
  • 當(dāng)fmDb.sqlite數(shù)據(jù)庫(kù)不存在時(shí),會(huì)自動(dòng)創(chuàng)建

【iOS】數(shù)據(jù)持久化(四)之FMDB基本使用,ios,objective-c,sqlite,sql

  • Path參數(shù)傳入空字符串@"",會(huì)在臨時(shí)目錄創(chuàng)建一個(gè)空數(shù)據(jù)庫(kù),F(xiàn)MDatabase連接關(guān)閉時(shí),數(shù)據(jù)庫(kù)文件也被刪除
  • 傳入的參數(shù)是nil時(shí),會(huì)在內(nèi)存中創(chuàng)建一個(gè)臨時(shí)數(shù)據(jù)庫(kù),F(xiàn)MDatabase連接關(guān)閉時(shí),數(shù)據(jù)庫(kù)文件會(huì)被銷毀

執(zhí)行更新操作

與SQLite一樣,除查詢以外的所有操作,都稱為“更新”,包括create、dropinsert、update、delete

【iOS】數(shù)據(jù)持久化(四)之FMDB基本使用,ios,objective-c,sqlite,sql

傳入的參數(shù)為SQLite語(yǔ)句字符串

...表示可變數(shù)量的參數(shù)(變長(zhǎng)參數(shù)),可以根據(jù)需要將一些額外的參數(shù)傳遞給方法

這里以創(chuàng)建表、插入數(shù)據(jù)作為示例:

BOOL result = [_dataBase executeUpdate: @"CREATE TABLE IF NOT EXISTS t_Student(ID INTEGER PRIMARY KEY AUTOINCREMENT, NAME TEXT NOT NULL, AGE INTEGER NOT NULL, SCORE REAL)"];
if (result) {
    NSLog(@"創(chuàng)表成功");
    //插入操作
    for (int i = 0; i < 10; ++i) {
        NSString* name = [NSString stringWithFormat: @"jaxon-%d", arc4random_uniform(100)];
                
    //不確定的參數(shù)用?、?占位
    [_dataBase executeUpdate: @"INSERT INTO t_student (name, age) VALUES (?, ?)", name, @(arc4random_uniform(40))];
                
    //不確定的參數(shù)用%@、%d占位
    //[_dataBase executeUpdateWithFormat: @"INSERT INTO t_student (name, age) VALUES (@%, %d)", name, @(arc4random_uniform(40))];
    }
            
    //刪除操作
    //[_dataBase executeUpdate: @"DROP TABLE IF EXISTS t_student"];
} else {
    NSLog(@"創(chuàng)表失敗");
}

執(zhí)行查詢操作

【iOS】數(shù)據(jù)持久化(四)之FMDB基本使用,ios,objective-c,sqlite,sql

只管將SQL查詢語(yǔ)句傳進(jìn)去

FMResultSet* resultSet = [_dataBase executeQuery: @"SELECT * FROM t_student"];

//	遍歷結(jié)果集
while ([resultSet next]) {
    int ID = [resultSet intForColumn: @"ID"];
    NSString* name = [resultSet stringForColumn: @"NAME"];
    int age = [resultSet intForColumn: @"AGE"];
    NSLog(@"%d %@ %d", ID, name, age);
    }

運(yùn)行結(jié)果:

【iOS】數(shù)據(jù)持久化(四)之FMDB基本使用,ios,objective-c,sqlite,sql

可以看到插入操作也是成功的

數(shù)據(jù)參數(shù)

這里還有一些有關(guān)參數(shù)的小細(xì)節(jié):

調(diào)用executeUpdate方法來(lái)將SQLite語(yǔ)句中?所指代的具體參數(shù)傳入,通常使用變長(zhǎng)參數(shù)來(lái)傳遞進(jìn)去的,像這樣:

NSString* sql = @"INSERT INTO t_student (name, age) VALUES (?, ?)";
                [_dataBase executeUpdate: sql, name, @(arc4random_uniform(40))];

變長(zhǎng)參數(shù)的作用體現(xiàn)在這里

要注意的是,參數(shù)必須是NSObject的子類,所以如果有C風(fēng)格的數(shù)據(jù)類型,應(yīng)包裝成OC風(fēng)格才能使用:

//錯(cuò)誤
//[_dataBase executeUpdate: @"INSERT INTO t_student VALUES (?)", 42];
//正確
[_dataBase executeUpdate: @"", [NSNumber numberWithInt: 42]];

數(shù)據(jù)庫(kù)隊(duì)列

FMDatabaseQueue涉及到保證線程安全,編者此時(shí)此刻并未學(xué)習(xí)有關(guān)線程相關(guān)知識(shí),以后再加以了解

總結(jié)

FMDB對(duì)SQLite進(jìn)行了良好的封裝,使用起來(lái)非常方便,對(duì)于那些使用純SQLite來(lái)進(jìn)行數(shù)據(jù)庫(kù)操作的項(xiàng)目,可以將其遷移到FMDB上,提高數(shù)據(jù)庫(kù)相關(guān)功能維護(hù)的效率文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-799518.html

到了這里,關(guān)于【iOS】數(shù)據(jù)持久化(四)之FMDB基本使用的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 持續(xù)集成部署-k8s-數(shù)據(jù)持久化-基本存儲(chǔ)方式

    關(guān)于k8s 數(shù)據(jù)持久化,可以先看下官方的介紹:

    2024年02月13日
    瀏覽(27)
  • 【pinia持久化存儲(chǔ)】使用pinia和pinia-plugin-persistedstate依賴進(jìn)行數(shù)據(jù)的持久化存儲(chǔ)

    【pinia持久化存儲(chǔ)】使用pinia和pinia-plugin-persistedstate依賴進(jìn)行數(shù)據(jù)的持久化存儲(chǔ)

    使用pinia和pinia-plugin-persistedstate依賴進(jìn)行數(shù)據(jù)的持久化存儲(chǔ)。 存儲(chǔ)方式 : localStorage sessionStorage pinia-plugin-persistedstate 中文官網(wǎng) pinia 中文官網(wǎng) 安裝和使用 pinia ,請(qǐng)參考使用pinia文章。 安裝 pinia-plugin-persistedstate : 使用前先將 pinia-plugin-persistedstate添加到pinia實(shí)例上。 在添加的時(shí)

    2023年04月17日
    瀏覽(25)
  • Unity學(xué)習(xí)筆記--數(shù)據(jù)持久化之PlayerPrefs的使用

    PlayerPrefs是Unity游戲引擎中的一個(gè)類,用于在游戲中存儲(chǔ)和訪問(wèn)玩家的偏好設(shè)置和數(shù)據(jù)。它可以用來(lái)保存玩家的游戲進(jìn)度、設(shè)置選項(xiàng)、最高分?jǐn)?shù)等信息。PlayerPrefs將數(shù)據(jù)存儲(chǔ)在本地文件中,因此可以在游戲重新啟動(dòng)時(shí)保持?jǐn)?shù)據(jù)的持久性。 PlayerPrefs中存儲(chǔ)的數(shù)據(jù)存儲(chǔ)在哪里? PC端

    2024年02月05日
    瀏覽(20)
  • 持續(xù)集成部署-k8s-數(shù)據(jù)持久化-NFS安裝與使用

    網(wǎng)絡(luò)文件系統(tǒng)(Network File System, NFS),是基于內(nèi)核的文件系統(tǒng),nfs主要是通過(guò)網(wǎng)絡(luò)實(shí)現(xiàn)服務(wù)器和客戶端之間的數(shù)據(jù)傳輸,采用遠(yuǎn)程過(guò)程調(diào)用RPC(Romete Procedure Call)機(jī)制,讓不同的機(jī)器節(jié)點(diǎn)共享文件目錄。只需將nfs服務(wù)器共享的文件目錄掛載到nfs客戶端,這樣客戶端就可以對(duì)遠(yuǎn)程

    2024年02月07日
    瀏覽(24)
  • Docker Desktop使用宿主機(jī)Windows的配置文件持久化存儲(chǔ)數(shù)據(jù)

    Docker Desktop使用宿主機(jī)Windows的配置文件持久化存儲(chǔ)數(shù)據(jù)

    《微軟官網(wǎng)Windows 上的 Docker 引擎幫助文檔》 以Nginx為例 把Nginx的配置文件復(fù)制到Windows 注意:Windows的盤(pán)符是小寫(xiě)的,以及目錄直接是用反斜杠的?。ㄎ业暨@坑里好久?。。。?修改宿主機(jī)的nginx.conf配置文件 刪除nginx容器 重啟啟動(dòng)一個(gè)新的Nginx容器 訪問(wèn)localhost

    2024年02月09日
    瀏覽(23)
  • 【Vue】pinia 數(shù)據(jù)持久化插件 pinia-plugin-persistedstate 使用

    刷新瀏覽器后,重新加載頁(yè)面時(shí)會(huì)重新初始化 vue、 pinia,而 pinia 中狀態(tài)的值僅在內(nèi)存中存在,而刷新導(dǎo)致瀏覽器存儲(chǔ)中的數(shù)據(jù)就沒(méi)了。 在實(shí)際開(kāi)發(fā)中,瀏覽器刷新時(shí),有些數(shù)據(jù)希望是保存下來(lái)的。如用戶登錄后,用戶信息會(huì)存儲(chǔ)在全局狀態(tài)中,如果不持久化狀態(tài),那么每次

    2024年02月07日
    瀏覽(25)
  • 如何在 uniapp 里面使用 pinia 數(shù)據(jù)持久化 (pinia-plugin-persistedstate)

    想要在 uniapp 里面使用 pinia-plugin-persistedstate 會(huì)遇到的問(wèn)題就是 uniapp里面沒(méi)有瀏覽器里面的 sessionStorage localStorage 這些 api 。 我們只需要替換掉 pinia-plugin-persistedstate 默認(rèn)的儲(chǔ)存 api 就可以了。使用 createPersistedState 重新創(chuàng)建一個(gè)實(shí)例, 把里面的 storage 的參數(shù)修改為對(duì)應(yīng)的 uniapp

    2024年02月08日
    瀏覽(21)
  • flutter:數(shù)據(jù)持久化

    flutter:數(shù)據(jù)持久化

    保存數(shù)據(jù)到本地磁盤(pán)是應(yīng)用程序常用功能之一,比如保存用戶登錄信息、用戶配置信息等。而保存這些信息通常使用 shared_preferences ,它保存數(shù)據(jù)的形式為 Key-Value (鍵值對(duì)),支持 Android 和 iOS。 shared_preferences 是一個(gè)第三方插件,在 Android 中使用 SharedPreferences ,在 iOS中使用

    2024年02月09日
    瀏覽(26)
  • RabbitMQ-數(shù)據(jù)持久化

    1、交換機(jī)持久化(SpringAMQP默認(rèn)) 2、隊(duì)列持久化(SpringAMQP默認(rèn)) 3、消息持久化 ? ? ? ? 如果采用純內(nèi)存操作,那么消息存儲(chǔ)達(dá)到隊(duì)列的上限之后,會(huì)有一個(gè)page out操作,這個(gè)操作是將隊(duì)列中已經(jīng)有的一部分MQ消息轉(zhuǎn)移到磁盤(pán),給隊(duì)列騰出空間,使得隊(duì)列能夠繼續(xù)接收MQ消息

    2024年01月21日
    瀏覽(23)
  • Docker數(shù)據(jù)持久化

    Docker數(shù)據(jù)持久化

    在容器層的 UnionFS(聯(lián)合文件系統(tǒng))中對(duì)文件/目錄的任何修改,無(wú)論是手工修改還是 容器在運(yùn)行過(guò)程中的修改,在該容器丟失或被刪除后這些修改將全部丟失。即這些修改是無(wú) 法保存下來(lái)的。若要保存下來(lái)這些修改,通常有兩種方式: 定制鏡像持久化:將這個(gè)修改過(guò)的容器

    2024年01月23日
    瀏覽(29)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包