自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

IOS開發(fā)學(xué)習(xí)筆記:iOS數(shù)據(jù)庫(kù)編程

移動(dòng)開發(fā) iOS
IOS開發(fā)學(xué)習(xí)筆記iOS數(shù)據(jù)庫(kù)編程是本文要介紹的內(nèi)容,SQLite3是一個(gè)輕量級(jí)的數(shù)據(jù)庫(kù),完全使用C語(yǔ)言編寫,使用簡(jiǎn)單方便。它是一個(gè)嵌入到程序進(jìn)程的數(shù)據(jù)庫(kù),和其他一些數(shù)據(jù)庫(kù)(MySQL,MS SQL)不同,它沒有獨(dú)立的進(jìn)程。

IOS開發(fā)學(xué)習(xí)筆記iOS數(shù)據(jù)庫(kù)編程是本文要介紹的內(nèi)容,主要是來(lái)了解IOS開發(fā)中的數(shù)據(jù)庫(kù)的學(xué)習(xí),具體內(nèi)容來(lái)看詳解。在IOS開發(fā)過(guò)程中常常會(huì)用到數(shù)據(jù)庫(kù),而SQLite3iPhone中支持的數(shù)據(jù)庫(kù)。下面簡(jiǎn)單介紹一下iPhone中SQLite3數(shù)據(jù)庫(kù)的用法:

SQLite3是一個(gè)輕量級(jí)的數(shù)據(jù)庫(kù),完全使用C語(yǔ)言編寫,使用簡(jiǎn)單方便。它是一個(gè)嵌入到程序進(jìn)程的數(shù)據(jù)庫(kù),和其他一些數(shù)據(jù)庫(kù)(MySQL,MS SQL)不同,它沒有獨(dú)立的進(jìn)程。

1、打開數(shù)據(jù)庫(kù)

首先聲明一個(gè)數(shù)據(jù)庫(kù)變量

  1. sqlite3 *db = NULL

每一個(gè)SQLite3都是一個(gè)文件,打開一個(gè)數(shù)據(jù)庫(kù)只需要調(diào)用一次sqlite3_open函數(shù):

  1. SQLITE_API int sqlite3_open(  
  2. const char *filename,   /* Database filename (UTF-8) */  
  3. sqlite3 **ppDb          /* OUT: SQLite db handle */  
  4. ); 

filename是數(shù)據(jù)庫(kù)的路徑,ppDb是指向返回的sqlite3數(shù)據(jù)庫(kù),返回SQLITE3_OK則表示正常。比如我們打開Document目錄下的“Test.db”數(shù)據(jù)庫(kù):

  1. int result = sqlite3_open([dbPath UTF8String], &db);  
  2. NSAssert(result==SQLITE_OK, @”Can’t open database %@”, dbPath); 

注意:如果dbPath路徑下的數(shù)據(jù)庫(kù)不存在,那么打開這個(gè)數(shù)據(jù)庫(kù)將會(huì)創(chuàng)建一個(gè)空的數(shù)據(jù)庫(kù)。

2、執(zhí)行SQL語(yǔ)句

SQLite3有3種執(zhí)行SQL語(yǔ)句的方法:

通過(guò)sqlite3_exec()函數(shù),適用于執(zhí)行(非查詢)語(yǔ)句:如CREATE TABLE、INSERT,REPLACE,DELETE等。

  1. SQLITE_API int sqlite3_exec(  
  2. sqlite3*,                                  /* An open database */  
  3. const char *sql,                           /* SQL to be evaluated */  
  4. int (*callback)(void*,int,char**,char**),  /* Callback function */  
  5. void *,                                    /* 1st argument to callback */  
  6. char **errmsg                              /* Error msg written here */  
  7. ); 

比如我們要?jiǎng)?chuàng)建一個(gè)表示個(gè)人(person)的表,就可以使用sqlite3_exec()函數(shù)。person表中包括名字(name)、性別(gender)、年齡(age)和生日(birthday)這幾個(gè)字段。代碼如下:

  1. char *errmsg = NULL;  
  2. result = sqlite3_exec(db, “CREATE TABLE person (”  
  3. “name TEXT,”  
  4. “gender INTEGER,”  
  5. “age INTEGER,”  
  6. “birthday DATE)”, NULL, NULL, &errmsg);  
  7. NSAssert(result==SQLITE_OK, @”Can’t CREATE TABLE: %s”, errmsg); 

通過(guò)sqlite3_get_table()函數(shù),適用于查詢語(yǔ)句SELECT。由于此函數(shù)返回一個(gè)字符串?dāng)?shù)組,因此對(duì)于要求結(jié)果為二進(jìn)制數(shù)據(jù)(如圖像數(shù)據(jù))的不能用此函數(shù)返回。

  1. SQLITE_API int sqlite3_get_table(  
  2. sqlite3 *db,          /* An open database */  
  3. const char *zSql,     /* SQL to be evaluated */  
  4. char ***pazResult,    /* Results of the query */  
  5. int *pnRow,           /* Number of result rows written here */  
  6. int *pnColumn,        /* Number of result columns written here */  
  7. char **pzErrmsg       /* Error msg written here */  
  8. ); 

例如我們要查詢person中的所有數(shù)據(jù):

  1. char **table = NULL;  
  2. int row,col;  
  3. result = sqlite3_get_table(db, “SELECT name,age,birthday from person”, &table, &row, &col, &errmsg);  
  4. NSAssert(result==SQLITE_OK, @”SQL ERROR: %s”, errmsg); 

那么字符串?dāng)?shù)組table中就包含所有的表信息,本例中每行3個(gè)元素(name、age和birthday),table***行元素是字段名字,如table[0]是”name”,table[1]是”age”,table[2]是”birthday”。table的第二行才是實(shí)際的數(shù)據(jù),如table[3]是”張三”,table[4]是”24″,table[5]是”1981-10-21 12:00:01″。

通過(guò)sqlite3_prepare()、sqlite3_step()、sqlite3_bind_xxx()以及sqlite3_finalize()等一系列函數(shù),可以逐行獲取數(shù)據(jù),并可以獲取二進(jìn)制數(shù)據(jù)。

sqlite3_prepare()用于編譯一個(gè)SQL語(yǔ)句,返回一個(gè)sqlite3_stmt結(jié)構(gòu)指針。sqlite3_stmt結(jié)構(gòu)指針用于sqlite3_step()、sqlite3_bind_xxx()以及sqlite3_finalize()等函數(shù)中。sqlite3_step()用于將當(dāng)前記錄指向下一個(gè)。sqlite3_bind_xxx()等一系列函數(shù)會(huì)獲取當(dāng)前記錄中各個(gè)字段對(duì)應(yīng)的值。***調(diào)用一下sqlite3_finalize()用于釋放一些資源。

3、其他高級(jí)應(yīng)用

(1)創(chuàng)建內(nèi)存數(shù)據(jù)庫(kù)

通常SQLite3數(shù)據(jù)庫(kù)存儲(chǔ)在磁盤文件中,所以對(duì)數(shù)據(jù)庫(kù)的讀寫等操作就會(huì)精彩的對(duì)磁盤文件進(jìn)行讀寫。SQLite3也可以將數(shù)據(jù)庫(kù)建立在內(nèi)存中,但是要注意建立內(nèi)存的數(shù)據(jù)是易失的(程序退出時(shí)內(nèi)存便會(huì)釋放)。我們知道磁盤的讀寫比內(nèi)存的讀寫要慢很多很多,有時(shí)候我們對(duì)讀寫速度要求很高,但是對(duì)數(shù)據(jù)是否時(shí)持久保存并不感興趣,這時(shí)使用內(nèi)存數(shù)據(jù)庫(kù)***不過(guò)了。

創(chuàng)建內(nèi)存數(shù)據(jù)庫(kù)很簡(jiǎn)單,只需要把打開數(shù)據(jù)庫(kù)的文件名改為“:memory:”即可。

  1. int result = sqlite3_open(“:memory:”, &db);  
  2. NSAssert(result==SQLITE_OK, @”Can’t open database %@”, dbPath); 

(2)創(chuàng)建自定義SQL語(yǔ)句函數(shù)

有時(shí)候我們想定義一個(gè)函數(shù)來(lái)判斷一個(gè)人是否滿足結(jié)婚條件(男性大于22歲,女性大于20歲),可惜SQL語(yǔ)句中并沒有提供如此復(fù)雜的判斷。這時(shí)創(chuàng)建一個(gè)自定義函數(shù)是非常方便的。

  1. static void db_func_canmarry(sqlite3_context *context, int argc, sqlite3_value **argv){  
  2. int gender = sqlite3_value_int(argv[0]);  
  3. int age = sqlite3_value_int(argv[1]);  
  4. int canmarry = 0;  
  5. if (gender == 0 && age > 22) {  
  6. canmarry = 1;  
  7. }  
  8. else if (gender == 1 && age > 20){  
  9. canmarry = 0;  
  10. }  
  11. sqlite3_result_int(context, canmarry);  

定義好函數(shù),把這個(gè)函數(shù)加入到數(shù)據(jù)庫(kù)SQL語(yǔ)句中。

  1. sqlite3_create_function(db, “CANMARRY”, 2, SQLITE_UTF8, NULL, &db_func_canmarry, NULL, NULL); 

以后我們執(zhí)行SQL語(yǔ)句SELECT * FROM person WHERE CANMARRY(gender,age) 就可以獲取到所有滿足結(jié)婚條件的人。

(3)分頁(yè)查詢

數(shù)據(jù)庫(kù)查詢時(shí)常常碰到需要分頁(yè)顯示結(jié)果的情況,這時(shí)候我們使用SQL語(yǔ)句LIMIT關(guān)鍵字就非常方便了。比如返回20行起的10行數(shù)據(jù)

  1. SELECT * FROM person WHERE CANMARRY(gender,age) LIMIT 20, 10 

小結(jié):IOS開發(fā)學(xué)習(xí)筆記iOS數(shù)據(jù)庫(kù)編程的內(nèi)容介紹完了,希望通過(guò)本文的學(xué)習(xí)能對(duì)你有所幫助!關(guān)于更多IOS開發(fā)的內(nèi)容,請(qǐng)參考IOS開發(fā)頻道

責(zé)任編輯:zhaolei 來(lái)源: 互聯(lián)網(wǎng)
相關(guān)推薦

2011-08-22 16:08:46

IOS開發(fā)數(shù)據(jù)庫(kù)

2013-04-01 10:49:51

iOS開發(fā)sqlite數(shù)據(jù)庫(kù)

2011-07-21 17:40:43

iOS 多核 內(nèi)存

2011-08-16 14:59:31

IOS開發(fā)ViewDidUnloiOS 5

2011-08-30 13:33:29

Qt數(shù)據(jù)庫(kù)

2013-09-12 12:55:53

iOS開發(fā)

2012-05-14 16:59:40

iOS

2013-03-28 09:45:34

iOS學(xué)習(xí)筆記總結(jié)整理

2015-09-01 10:37:54

ios靜態(tài)庫(kù)開發(fā)

2011-08-03 09:44:18

IOS開發(fā) UITextFiel UITableVie

2011-08-11 14:23:57

SQL Server 索引分區(qū)

2011-07-08 18:28:43

iOS 接口

2011-07-21 11:05:18

iOS 族譜 Cocoa

2011-08-25 11:08:21

Sybase數(shù)據(jù)庫(kù)

2011-08-09 16:08:58

IOS游戲Cocos2d

2012-05-14 17:06:46

iOS

2011-07-22 16:57:44

iOS 通知

2021-11-11 17:36:07

鴻蒙HarmonyOS應(yīng)用

2013-07-25 13:30:35

iOS開發(fā)學(xué)習(xí)讀取照片庫(kù)

2015-09-11 11:02:23

ios靜態(tài)庫(kù)開發(fā)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)