iOS中持久化存儲SQLite(一)

在iOS中做持久化存儲有多種方案,其中包括plist, preference, sqlite, core data,其中:
(1)plist, preference適合小型數據存儲,因為每次存儲前都必須將文件內容讀到內存中,因此如果數據量過大就會占用大量的內存,同時修改與查詢也不是很方便,都必須讀入內存中,自己來寫相應的查詢函數來查詢結果。
(2)sqlite為嵌入式系統中使用的持久化存儲數據庫方案,其量級比較輕,因此只需要占用幾百空間就能達到數據庫的效果,方便數據的增刪查改。在iOS中其數據庫操作分為純C語言接口以及對其進行OC封裝的接口第三方庫FMDB
(3)Core Data為蘋果自己在Sqlite的上封裝的數據存儲方案,雖然其屏蔽了數據庫操作的語句,但是其量級比較重。
下面就介紹如何使用純C語言接口來操作數據庫:
1.數據庫的打開
- (void)setUpDB {
NSString *fileName = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:@”shop.sqlite”];
int status = sqlite3_open(fileName.UTF8String, &_db);
if (status == SQLITE_OK) {
NSLog(@”打開數據庫成功”);
// 創表
const char *sql = “CREATE TABLE IF NOT EXISTS t_shop (id integer PRIMARY KEY, name text NOT NULL, price real)”;
char *errmsg = NULL;
sqlite3_exec(self.db, sql, NULL, NULL, &errmsg);
if (errmsg) {
NSLog(@”創建表失敗 - %s”, errmsg);
}
} else {
NSLog(@”打開數據庫失敗”);
}

}
2.安裝數據
- (void)setUpData {
const char *sql = “SELECT name, price FROM t_shop”;
sqlite3_stmt *stmt = NULL;
int status = sqlite3_prepare_v2(self.db, sql, -1, &stmt, NULL);

if (status == SQLITE_OK) {while (sqlite3_step(stmt) == SQLITE_ROW) {const char *name = (const char *)sqlite3_column_text(stmt, 0);const char *price = (const char *)sqlite3_column_text(stmt, 1);FPShop *shop = [[FPShop alloc] initWithName:[NSString stringWithUTF8String:name] price:[NSString stringWithUTF8String:price]];[self.shops addObject:shop];}
}

}
3.插入數據
- (IBAction)insert:(UIButton *)sender {
NSString *sql = [NSString stringWithFormat:@”INSERT INTO t_shop(name, price) VALUES (‘%@’, %f);”, self.nameField.text, self.priceField.text.doubleValue];
sqlite3_exec(self.db, sql.UTF8String, NULL, NULL, NULL);

FPShop *shop = [[FPShop alloc] initWithName:self.nameField.text price:self.priceField.text];
[self.shops addObject:shop];
[self.tableView reloadData];

}
4.搜索數據
- (void)searchBar:(UISearchBar )searchBar textDidChange:(NSString )searchText {
[self.shops removeAllObjects];
NSString *sql = [NSString stringWithFormat:@”SELECT name, price FROM t_shop WHERE name LIKE ‘%%%@%%’ OR price LIKE ‘%%%@%%’”, searchText, searchText];
sqlite3_stmt *stmt = NULL;

int status = sqlite3_prepare_v2(self.db, sql.UTF8String, -1, &stmt, NULL);
if (status == SQLITE_OK) {while (sqlite3_step(stmt) == SQLITE_ROW) {const char *name = (const char *) sqlite3_column_text(stmt, 0);const char *price = (const char *)sqlite3_column_text(stmt, 1);FPShop *shop = [[FPShop alloc] initWithName:[NSString stringWithUTF8String:name] price:[NSString stringWithUTF8String:price]];[self.shops addObject:shop];}
}[self.tableView reloadData];

}

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

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

相關文章

多進程相關內容

多進程相關內容 multiprocessing模塊與process類 multiprocessing python中的多線程無法利用多核優勢,如果想要充分地使用多核CPU的資源(os.cpu_count()查看),在python中大部分情況需要使用多進程。Python提供了multiprocessing。…

iOS中SQLite持久化存儲第三方庫FMDB

interface HMShopTool : NSObject (NSArray *)shops; (void)addShop:(HMShop *)shop; end implementation HMShopTool static FMDatabase *_db; (void)initialize { // 1.打開數據庫 NSString *path [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, N…

python超神之路:python異常對照表

python異常對照表 異常名稱描述BaseException所有異常的基類SystemExit解釋器請求退出KeyboardInterrupt用戶中斷執行(通常是輸入^C)Exception常規錯誤的基類StopIteration迭代器沒有更多的值GeneratorExit生成器(generator)發生異常來通知退出StandardError所有的內建標準異常…

python超神之路:創建對象的9種方法

python生成對象的9種方法 class Point:def __init__(self,x,y):self.x xself.y y import sys import copy import typespoint1 Point(1,2) point2 eval("{}({},{})".format("Point",1,2)) point3 globals()[Point](1,2) point4 locals()["Point…

面向接口的編程

面向接口的編程,將接口與實現分離,可以極大的降低代碼的耦合,比如在編程中使用的加密接口,如果將具體的加密算法寫入到使用加密的地方,這樣就會導致,下一次加密方法發生改變的時候會導致大量的地方需要修改…

ASP.NET Core Web 應用程序系列(三)- 在ASP.NET Core中使用Autofac替換自帶DI進行構造函數和屬性的批量依賴注入(MVC當中應用)...

在上一章中主要和大家分享了在ASP.NET Core中如何使用Autofac替換自帶DI進行構造函數的批量依賴注入,本章將和大家繼續分享如何使之能夠同時支持屬性的批量依賴注入。 約定: 1、倉儲層接口都以“I”開頭,以“Repository”結尾。倉儲層實現都以…

可視化caffe模型結構及在線可視化

在線可視化caffe模型結構 http://ethereon.github.io/netscope/#/editor 假設Caffe的目錄是$(CAFFE_ROOT) 1.編譯caffe的python接口 $ make pycaffe 2.裝各種依賴 $ pip install pydot $ sudo apt-get install graphviz 3.可視化模型 draw_net.py執行的時候帶三個參數 …

布式緩存系統Memcached簡介與實踐

緣起: 在數據驅動的web開發中,經常要重復從數據庫中取出相同的數據,這種重復極大的增加了數據庫負載。緩存是解決這個問題的好辦法。但是ASP.NET中的雖然已經可以實現對頁面局部進行緩存,但還是不夠靈活。此時Memcached或許是你想要的。Memca…

仿百度翻頁(轉)

https://www.cnblogs.com/fozero/p/9874334.html 轉載于:https://www.cnblogs.com/hj0711/p/11390203.html

matlab 多核并行編程

在使用matlab處理大數據,編程需要注意兩個問題:并行運算和釋放內存。matlab也提供了并行計算的功能,甚至能用GPU加速。并行計算工具箱,叫做parallel computing toolbox.它的使用方法,可以從matlab的幫助獲得。 Parall…

iOS核心動畫之CALayer(1)

本文目錄 一、什么是CALayer二、CALayer的簡單使用 回到頂部一、什么是CALayer * 在iOS系統中,你能看得見摸得著的東西基本上都是UIView,比如一個按鈕、一個文本標簽、一個文本輸入框、一個圖標等等,這些都是UIView。 * 其實UIView之所以能顯…

ASP.NET Core Web 應用程序系列(四)- ASP.NET Core 異步編程之async await

PS:異步編程的本質就是新開任務線程來處理。 約定:異步的方法名均以Async結尾。 實際上呢,異步編程就是通過Task.Run()來實現的。 了解線程的人都知道,新開一個線程來處理事務這個很常見,但是在以往是沒辦法接收線程里…

iOS核心動畫之CALayer-layer的創建

本文目錄 一、添加一個簡單的圖層二、添加一個顯示圖片的圖層三、為什么CALayer中使用CGColorRef和CGImageRef這2種數據類型,而不用UIColor和UIImage?四、UIView和CALayer的選擇五、UIView和CALayer的其他關系 * 上一講已經說過,UIView內部默…

iOS核心動畫之CALayer-隱式動畫

本文目錄 一、隱式動畫屬性二、position和anchorPoint 回到頂部一、隱式動畫屬性 * 在前面幾講中已經提到,每一個UIView內部都默認關聯著一個CALayer,我們可用稱這個Layer為Root Layer(根層)。所有的非Root Layer,也就…

多進程補充

多進程補充 僵尸進程和孤兒進程 基于unix環境(linux,macOS) 主進程需要等待子進程結束之后,主進程才結束 主進程時刻監測子進程的運行狀態,當子進程結束之后,一段時間之內,將子進程進行回收.為什么主進程不在子進程結束后馬上對其回收呢? 主進程與子進程是異步關系.主進程無法…

iOS核心動畫之CALayer-自定義層

本文目錄 一、自定義層的方法1二、自定義層的方法2 三、其他 自定義層,其實就是在層上繪圖,一共有2種方法,下面詳細介紹一下。 回到頂部一、自定義層的方法1 方法描述:創建一個CALayer的子類,然后覆蓋drawInContext:方…

iOS核心動畫之CoreAnimation

本文目錄一、Core Animation簡介二、Core Animation的使用步驟三、CAAnimation四、CAPropertyAnimation 回到頂部一、Core Animation簡介 * Core Animation,中文翻譯為核心動畫,它是一組非常強大的動畫處理API,使用它能做出非常炫麗的動畫效果…

抽象類

當編寫一個類時,我們往往會為該類定義一些方法,這些方法是用來描述該類的功能具體實現方式,那么這些方法都有具體的方法體。 也就是編輯一個類 這個類不是絕體的東西 是一個抽象的 例如 描述JavaEE工程師:行為:工作。 …

iOS核心動畫 Core Animation2-CABasicAnimation

Core Animation2-CABasicAnimation 本文目錄 一、平移動畫二、縮放動畫三、旋轉動畫四、其他 CABasicAnimation是CAPropertyAnimation的子類,使用它可以實現一些基本的動畫效果,它可以讓CALayer的某個屬性從某個值漸變到另一個值。下面就用CABasicAnimat…

OpenStack Telemetry系統架構及實踐

1. 概述 早期OpenStack的計量功能由Ceilometer項目負責,后來Ceilometer一分為四,每個項目負責一個方面的工作。不得不說這是OpenStack開發中的一個特色,比如Cinder和Neutron也是從早期的Nova中拆分出來的。 OpenStack Telemetry體系的架構如下…