成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

IOS開發學習筆記:iOS數據庫編程

移動開發 iOS
IOS開發學習筆記iOS數據庫編程是本文要介紹的內容,SQLite3是一個輕量級的數據庫,完全使用C語言編寫,使用簡單方便。它是一個嵌入到程序進程的數據庫,和其他一些數據庫(MySQL,MS SQL)不同,它沒有獨立的進程。

IOS開發學習筆記iOS數據庫編程是本文要介紹的內容,主要是來了解IOS開發中的數據庫的學習,具體內容來看詳解。在IOS開發過程中常常會用到數據庫,而SQLite3iPhone中支持的數據庫。下面簡單介紹一下iPhone中SQLite3數據庫的用法:

SQLite3是一個輕量級的數據庫,完全使用C語言編寫,使用簡單方便。它是一個嵌入到程序進程的數據庫,和其他一些數據庫(MySQL,MS SQL)不同,它沒有獨立的進程。

1、打開數據庫

首先聲明一個數據庫變量

  1. sqlite3 *db = NULL

每一個SQLite3都是一個文件,打開一個數據庫只需要調用一次sqlite3_open函數:

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

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

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

注意:如果dbPath路徑下的數據庫不存在,那么打開這個數據庫將會創建一個空的數據庫。

2、執行SQL語句

SQLite3有3種執行SQL語句的方法:

通過sqlite3_exec()函數,適用于執行(非查詢)語句:如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. ); 

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

  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); 

通過sqlite3_get_table()函數,適用于查詢語句SELECT。由于此函數返回一個字符串數組,因此對于要求結果為二進制數據(如圖像數據)的不能用此函數返回。

  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中的所有數據:

  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); 

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

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

sqlite3_prepare()用于編譯一個SQL語句,返回一個sqlite3_stmt結構指針。sqlite3_stmt結構指針用于sqlite3_step()、sqlite3_bind_xxx()以及sqlite3_finalize()等函數中。sqlite3_step()用于將當前記錄指向下一個。sqlite3_bind_xxx()等一系列函數會獲取當前記錄中各個字段對應的值。***調用一下sqlite3_finalize()用于釋放一些資源。

3、其他高級應用

(1)創建內存數據庫

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

創建內存數據庫很簡單,只需要把打開數據庫的文件名改為“:memory:”即可。

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

(2)創建自定義SQL語句函數

有時候我們想定義一個函數來判斷一個人是否滿足結婚條件(男性大于22歲,女性大于20歲),可惜SQL語句中并沒有提供如此復雜的判斷。這時創建一個自定義函數是非常方便的。

  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);  

定義好函數,把這個函數加入到數據庫SQL語句中。

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

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

(3)分頁查詢

數據庫查詢時常常碰到需要分頁顯示結果的情況,這時候我們使用SQL語句LIMIT關鍵字就非常方便了。比如返回20行起的10行數據

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

小結:IOS開發學習筆記iOS數據庫編程的內容介紹完了,希望通過本文的學習能對你有所幫助!關于更多IOS開發的內容,請參考IOS開發頻道

責任編輯:zhaolei 來源: 互聯網
相關推薦

2011-08-22 16:08:46

IOS開發數據庫

2013-04-01 10:49:51

iOS開發sqlite數據庫

2011-07-21 17:40:43

iOS 多核 內存

2011-08-30 13:33:29

Qt數據庫

2011-08-16 14:59:31

IOS開發ViewDidUnloiOS 5

2013-09-12 12:55:53

iOS開發

2013-03-28 09:45:34

iOS學習筆記總結整理

2012-05-14 16:59:40

iOS

2015-09-01 10:37:54

ios靜態庫開發

2011-08-11 14:23:57

SQL Server 索引分區

2011-08-03 09:44:18

IOS開發 UITextFiel UITableVie

2011-08-25 11:08:21

Sybase數據庫

2011-07-21 11:05:18

iOS 族譜 Cocoa

2011-07-08 18:28:43

iOS 接口

2012-05-14 17:06:46

iOS

2011-08-09 16:08:58

IOS游戲Cocos2d

2021-11-11 17:36:07

鴻蒙HarmonyOS應用

2013-07-25 13:30:35

iOS開發學習讀取照片庫

2015-09-11 11:02:23

ios靜態庫開發

2011-07-22 16:57:44

iOS 通知
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 91高清在线视频 | 国产黄色在线观看 | 国产一区视频在线 | 国产精品国产三级国产aⅴ中文 | 欧美成人a | 国产二区在线播放 | 亚洲视频在线免费观看 | 色999日韩 | 久久一区二区三区四区五区 | 91高清在线观看 | 国产高清在线精品一区二区三区 | 国产精品久久久久久久久久久久冷 | 久草网站 | 在线观看国产三级 | 国产蜜臀97一区二区三区 | 久久lu | 韩日一区二区三区 | 久久9视频 | 亚洲人久久 | 在线观看中文字幕av | av在线一区二区三区 | 中文字幕 国产精品 | 国产成人午夜精品影院游乐网 | 国产欧美一区二区三区在线播放 | 久久久久国产一区二区三区四区 | 亚洲午夜av久久乱码 | 久久久久久久久中文字幕 | 亚洲精品视 | 免费看一区二区三区 | 国产乱码精品一区二区三区五月婷 | 国产一区二区精品在线 | 日韩精品久久久久 | 亚洲aⅴ一区二区 | 一级视频在线免费观看 | 黄色一级大片视频 | 国产精品福利网 | 国产精品久久久久久久久图文区 | 天堂男人av| 五月天婷婷丁香 | 亚洲精品黄色 | 亚洲导航深夜福利涩涩屋 |