精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

iOS開發:用SQLite3存儲和讀取數據

移動開發 iOS
SQLite,是一款輕型的數據庫,是遵守ACID的關聯式數據庫管理系統,它的設計目標是嵌入式的,而且目前已經在很多嵌入式產品中使用了它,它占用資源非常的低,在嵌入式設備中,可能只需要幾百K的內存就夠了。它能夠支持Windows/Linux/Unix等等主流的操作系統,同時能夠跟很多程序語言相結合,比如 Tcl、C#、PHP、Java等,還有ODBC接口,同樣比起Mysql、PostgreSQL這兩款開源世界著名的數據庫管理系統來講,它的處理速度比他們都快。

SQLite3是嵌入在iOS中的關系型數據庫,對于存儲大規模的數據很有效。SQLite3使得不必將每個對象都加到內存中。

基本操作:

(1)打開或者創建數據庫

  1. sqlite3 *database; 
  2. int result = sqlite3_open("/path/databaseFile", &database); 

如果/path/databaseFile不存在,則創建它,否則打開它。如果result的值是SQLITE_OK,則表明我們的操作成功。

注意上述語句中數據庫文件的地址字符串前面沒有@字符,它是一個C字符串。將NSString字符串轉成C字符串的方法是:

  1. const char *cString = [nsString UTF8String]; 

(2)關閉數據庫

  1. sqlite3_close(database); 

(3)創建一個表格

  1. char *errorMsg; 
  2. const char *createSQL = "CREATE TABLE IF NOT EXISTS PEOPLE (ID INTEGER PRIMARY KEY AUTOINCREMENT, FIELD_DATA TEXT)"
  3. int result = sqlite3_exec(database, createSQL, NULL, NULL, &errorMsg); 

執行之后,如果result的值是SQLITE_OK,則表明執行成功;否則,錯誤信息存儲在errorMsg中。

sqlite3_exec這個方法可以執行那些沒有返回結果的操作,例如創建、插入、刪除等。

(4)查詢操作

  1. NSString *query = @"SELECT ID, FIELD_DATA FROM FIELDS ORDER BY ROW"
  2. sqlite3_stmt *statement; 
  3. int result = sqlite3_prepare_v2(database, [query UTF8String], -1, &statement, nil); 

如果result的值是SQLITE_OK,則表明準備好statement,接下來執行查詢:

  1. while (sqlite3_step(statement) == SQLITE_ROW) { 
  2.     int rowNum = sqlite3_column_int(statement, 0); 
  3.     char *rowData = (char *)sqlite3_column_text(statement, 1); 
  4.     NSString *fieldValue = [[NSString alloc] initWithUTF8String:rowData]; 
  5.     // Do something with the data here 
  6. sqlite3_finalize(statement); 

使用過其他數據庫的話應該很好理解這段語句,這個就是依次將每行的數據存在statement中,然后根據每行的字段取出數據。

(5)使用約束變量

實際操作時經常使用叫做約束變量的東西來構造SQL字符串,從而進行插入、查詢或者刪除等。

例如,要執行帶兩個約束變量的插入操作,***個變量是int類型,第二個是C字符串:

  1. char *sql = "insert into oneTable values (?, ?);"
  2. sqlite3_stmt *stmt; 
  3. if (sqlite3_prepare_v2(database, sql, -1, &stmt, nil) == SQLITE_OK) { 
  4.     sqlite3_bind_int(stmt, 1, 235); 
  5.     sqlite3_bind_text(stmt, 2, "valueString", -1, NULL); 
  6. if (sqlite3_step(stmt) != SQLITE_DONE) 
  7.     NSLog(@"Something is Wrong!"); 
  8. sqlite3_finalize(stmt); 

這里,sqlite3_bind_int(stmt, 1, 235);有三個參數:

***個是sqlite3_stmt類型的變量,在之前的sqlite3_prepare_v2中使用的。

第二個是所約束變量的標簽index。

第三個參數是要加的值。

有一些函數多出兩個變量,例如

  1. sqlite3_bind_text(stmt, 2, "valueString", -1, NULL); 

這句,第四個參數代表第三個參數中需要傳遞的長度。對于C字符串來說,-1表示傳遞全部字符串。

第五個參數是一個回調函數,比如執行后做內存清除工作。

接下來,做個小例子吧!

1、運行Xcode 4.3,新建一個Single View Application,名稱為SQLite3 Test:

2、連接SQLite3庫:

按照下圖中的紅色數字的順序找到加號:

單擊這個加號,打開窗口,在搜索欄輸入sqlite3:

選擇libsqlite3.dylib,單擊Add,添加到工程。

3、進行界面設計。打開ViewController.xib,使用Interface Builder設計界面如下:

設置四個文本框的tag分別是1、2、3、4。

4、在ViewController.h中添加屬性和方法:

  1. @property (copy, nonatomic) NSString *databaseFilePath; 
  2.  
  3. - (void)applicationWillResignActive:(NSNotification *)notification; 

5、打開ViewController.m,向其中添加代碼:

5.1 在開頭添加代碼:

  1. #import "sqlite3.h" 
  2. #define kDatabaseName @"database.sqlite3" 

5.2 在@implementation之后添加代碼:

  1. @synthesize databaseFilePath; 

5.3 在viewDidLoad方法中添加代碼:

  1. - (void)viewDidLoad 
  2.     [super viewDidLoad]; 
  3.     // Do any additional setup after loading the view, typically from a nib. 
  4.     //獲取數據庫文件路徑 
  5.     NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
  6.     NSString *documentsDirectory = [paths objectAtIndex:0]; 
  7.     self.databaseFilePath = [documentsDirectory stringByAppendingPathComponent:kDatabaseName]; 
  8.     //打開或創建數據庫 
  9.     sqlite3 *database; 
  10.     if (sqlite3_open([self.databaseFilePath UTF8String] , &database) != SQLITE_OK) { 
  11.         sqlite3_close(database); 
  12.         NSAssert(0, @"打開數據庫失?。?quot;); 
  13.     } 
  14.     //創建數據庫表 
  15.     NSString *createSQL = @"CREATE TABLE IF NOT EXISTS FIELDS (TAG INTEGER PRIMARY KEY, FIELD_DATA TEXT);"
  16.     char *errorMsg; 
  17.     if (sqlite3_exec(database, [createSQL UTF8String], NULL, NULL, &errorMsg) != SQLITE_OK) { 
  18.         sqlite3_close(database); 
  19.         NSAssert(0, @"創建數據庫表錯誤: %s", errorMsg); 
  20.     } 
  21.     //執行查詢 
  22.     NSString *query = @"SELECT TAG, FIELD_DATA FROM FIELDS ORDER BY TAG"
  23.     sqlite3_stmt *statement; 
  24.     if (sqlite3_prepare_v2(database, [query UTF8String], -1, &statement, nil) == SQLITE_OK) { 
  25.         //依次讀取數據庫表格FIELDS中每行的內容,并顯示在對應的TextField 
  26.         while (sqlite3_step(statement) == SQLITE_ROW) { 
  27.             //獲得數據 
  28.             int tag = sqlite3_column_int(statement, 0); 
  29.             char *rowData = (char *)sqlite3_column_text(statement, 1); 
  30.             //根據tag獲得TextField 
  31.             UITextField *textField = (UITextField *)[self.view viewWithTag:tag]; 
  32.             //設置文本 
  33.             textField.text = [[NSString alloc] initWithUTF8String:rowData]; 
  34.         } 
  35.         sqlite3_finalize(statement); 
  36.     } 
  37.     //關閉數據庫 
  38.     sqlite3_close(database); 
  39.     //當程序進入后臺時執行寫入數據庫操作 
  40.     UIApplication *app = [UIApplication sharedApplication]; 
  41.     [[NSNotificationCenter defaultCenter] 
  42.      addObserver:self 
  43.      selector:@selector(applicationWillResignActive:) 
  44.      name:UIApplicationWillResignActiveNotification 
  45.      object:app]; 

5.4 在@end之前實現方法:

  1. //程序進入后臺時的操作,實現將當前顯示的數據寫入數據庫 
  2. - (void)applicationWillResignActive:(NSNotification *)notification { 
  3.     //打開數據庫 
  4.     sqlite3 *database; 
  5.     if (sqlite3_open([self.databaseFilePath UTF8String], &database) 
  6.         != SQLITE_OK) { 
  7.         sqlite3_close(database); 
  8.         NSAssert(0, @"打開數據庫失??!"); 
  9.     } 
  10.     //向表格插入四行數據 
  11.     for (int i = 1; i <= 4; i++) {  
  12.         //根據tag獲得TextField 
  13.         UITextField *textField = (UITextField *)[self.view viewWithTag:i]; 
  14.         //使用約束變量插入數據 
  15.         char *update = "INSERT OR REPLACE INTO FIELDS (TAG, FIELD_DATA) VALUES (?, ?);"
  16.         sqlite3_stmt *stmt; 
  17.         if (sqlite3_prepare_v2(database, update, -1, &stmt, nil) == SQLITE_OK) { 
  18.             sqlite3_bind_int(stmt, 1, i); 
  19.             sqlite3_bind_text(stmt, 2, [textField.text UTF8String], -1, NULL); 
  20.         } 
  21.         char *errorMsg = NULL; 
  22.         if (sqlite3_step(stmt) != SQLITE_DONE) 
  23.             NSAssert(0, @"更新數據庫表FIELDS出錯: %s", errorMsg); 
  24.         sqlite3_finalize(stmt); 
  25.     } 
  26.     //關閉數據庫 
  27.     sqlite3_close(database); 

6、實現關閉鍵盤,參考《iOS開發4:關閉鍵盤》中的第2步。其中,backgroundTap方法如下:

  1. //關閉鍵盤 
  2. - (IBAction)backgroundTap:(id)sender { 
  3.     for (int i = 1; i <= 4; i++) { 
  4.         UITextField *textField = (UITextField *)[self.view viewWithTag:i]; 
  5.         [textField resignFirstResponder]; 
  6.     } 

7、運行程序:

剛運行時顯示如下面左圖:

在各個文本框輸入內容,如上面右圖。然后按Home鍵,這樣,就執行了寫入數據的操作。

***次運行程序時,在SandBox的Documents目錄下出現數據庫文件database.sqlite3:

此時退出程序,再次運行,則顯示的就是上次退出時的值。

責任編輯:閆佳明 來源: cocoachina
相關推薦

2012-03-06 12:59:11

iOS SQLite3iOSSQLite3

2012-03-06 10:17:45

iOS SQLite3iOSSQLite3

2021-02-15 15:40:28

SQLite3數據庫

2011-07-07 16:42:38

iPhone Sqlite3 數據庫

2013-04-10 14:21:35

2013-04-09 16:47:19

iOS嵌入式數據庫SQLit

2012-02-29 10:18:31

SQLite3Android

2019-08-12 11:40:48

數據庫SQLite3數據類型

2011-08-15 17:20:25

iPhone應用Sqlite3FMDB

2012-03-01 20:42:12

iPhone

2011-08-05 16:50:00

iPhone 數據 Sqlite

2012-03-06 09:50:24

Android SQLAndroidSQLite3

2017-10-26 12:37:24

Pythonsqlite3數據庫

2011-08-01 13:32:07

Objective-C Sqlite3 框架

2011-07-05 17:38:52

QT Sqlite

2013-04-01 10:49:51

iOS開發sqlite數據庫

2024-02-19 00:00:00

SQLite3數據庫代碼

2011-09-07 15:39:08

iPhoneObjective-CSQLite3

2020-09-24 16:05:44

C語言sqlite3函數

2013-07-25 14:44:48

sqlite實例教程iOS開發學習sqlite打造詞典
點贊
收藏

51CTO技術棧公眾號

中日韩在线观看视频| 给我看免费高清在线观看| 欧美日韩成人免费观看| 另类春色校园亚洲| 欧美亚洲高清一区| 一本二本三本亚洲码| 色婷婷av一区二区三| 青娱乐精品视频| 欧美激情一区二区三区久久久| 在线观看国产免费视频| 久久人体av| 亚洲.国产.中文慕字在线| 日韩色妇久久av| 亚洲大尺度网站| 日本成人在线视频网站| 欧美国产日韩视频| 黑人と日本人の交わりビデオ| 一区二区三区自拍视频| 欧美视频日韩视频在线观看| 91黄色在线看| 黄a在线观看| 久久久精品免费免费| 99国产视频| 怡红院男人的天堂| 国产日韩欧美一区二区三区在线观看| 久久天天躁狠狠躁夜夜爽蜜月 | 麻豆蜜桃在线观看| 亚洲欧洲av一区二区三区久久| 国内精品二区| 国产黄色片免费| 蜜桃在线一区二区三区| 欧美中文在线免费| 久久综合色综合| 国产精久久一区二区| 日韩欧美黄色动漫| 亚洲一区二区三区av无码| 天堂中文а√在线| 国产精品丝袜在线| 日韩av不卡播放| 欧美xxx.com| 99久久99久久免费精品蜜臀| 国产精品一区视频| 亚洲a视频在线| 国产一区不卡精品| 成人在线中文字幕| 国产精品毛片久久久久久久av| 免费观看在线色综合| 欧美亚州一区二区三区| 九九热在线免费观看| 免费短视频成人日韩| 亚洲丁香婷深爱综合| 韩国三级在线看| jazzjazz国产精品久久| 精品欧美一区二区在线观看| www.欧美com| 亚洲国产一区二区三区网站| 日韩欧美成人午夜| 成人欧美精品一区二区| 国内露脸中年夫妇交换精品| 精品久久久久久亚洲综合网| 国产+高潮+白浆+无码| 欧美人妖在线观看| 欧美天堂一区二区三区| caoporn超碰97| 国产精品亚洲d| 欧美日韩亚洲另类| 91丝袜超薄交口足| 视频一区国产| 亚洲精品国产精品国自产观看浪潮| youjizz.com日本| 西野翔中文久久精品国产| 精品视频在线观看日韩| 怡红院一区二区三区| 欧美色女视频| 萌白酱国产一区二区| 人妻少妇精品视频一区二区三区| 小说区图片区色综合区| 一区二区在线视频播放| 一本一本久久a久久| 亚洲色图国产| 97视频在线播放| 久久午夜鲁丝片| 国产美女主播视频一区| 好吊色欧美一区二区三区视频| 蜜桃免费在线| 亚洲视频网在线直播| 人妻夜夜添夜夜无码av| 欧美色999| 日韩一区二区在线播放| 欧美韩国日本在线| jizzjizz少妇亚洲水多| 欧美一区二区三区电影| 少妇特黄一区二区三区| 91精品国产91久久综合| 91成人在线观看国产| 亚洲最大成人在线视频| a美女胸又www黄视频久久| 三区精品视频观看| 男人天堂亚洲二区| 亚洲色欲色欲www在线观看| 我的公把我弄高潮了视频| 亚洲综合av一区二区三区| 精品卡一卡二卡三卡四在线| 男女做爰猛烈刺激| 黄色国产精品| 91精品久久久久久久久久另类| 天天干天天色天天| 亚洲视频狠狠干| 116极品美女午夜一级| 精品国产伦一区二区三区观看说明| 亚洲国产美女久久久久| xxxx日本少妇| 免费久久精品视频| 久久久久资源| 国内老司机av在线| 91麻豆精品国产91久久久使用方法 | 亚洲精品乱码久久久久久按摩观| 乳色吐息在线观看| av中字幕久久| 青青a在线精品免费观看| 精品人妻少妇嫩草av无码专区| 国产三级欧美三级日产三级99 | 国产乱人伦精品一区二区| 久热国产在线| 欧美三级视频在线观看| 亚洲熟妇无码av| 亚洲久久在线| 国产乱子伦精品| 亚洲资源一区| 一区二区三区**美女毛片| 中文字幕中文字幕在线中心一区| 免费在线高清av| 亚洲地区一二三色| 中文字幕一二三| 99久久99热这里只有精品| 国产精品电影一区| 黄色小视频在线观看| 狠狠躁天天躁日日躁欧美| 人妖粗暴刺激videos呻吟| 欧美日韩一区二区国产| 91免费观看| 中中文字幕av在线| 欧美一级夜夜爽| 国产日韩欧美在线观看视频| 狠狠色狠狠色综合日日91app| 日本视频一区在线观看| 黄瓜视频成人app免费| 亚洲男人天堂2019| av黄色免费在线观看| 日韩精彩视频在线观看| 日本欧美精品久久久| 日本一区二区三区视频在线| 在线观看国产成人av片| 国产又粗又长视频| 亚洲欧美另类小说视频| 丰满人妻一区二区三区53视频| 亚洲电影在线一区二区三区| 亚洲一区二区三区777| 在线中文字幕电影| 精品国产免费一区二区三区香蕉| 久久久99精品| 99九九99九九九视频精品| 丰满少妇被猛烈进入高清播放| 欧美综合精品| 国产精品久久久久不卡| 在线观看精品一区二区三区| 欧美男男青年gay1069videost| 免费黄色激情视频| 粉嫩嫩av羞羞动漫久久久 | 欧美寡妇性猛交xxx免费| 亚洲第一精品久久忘忧草社区| 日本少妇性生活| 久久久激情视频| caoporn超碰97| 中文在线日韩| 久久久久网址| 亚洲午夜国产成人| 国a精品视频大全| 91福利免费视频| 亚洲精品久久久久久国产精华液| 亚洲欧洲国产视频| 99国产精品视频免费观看一公开 | 香蕉久久久久久av成人| 99在线观看免费视频精品观看| 日韩av影视| 欧美在线色图| 亚洲人妖av一区二区| 污免费在线观看| 亚洲一区导航| 午夜精品久久久久久久男人的天堂| 天天干,夜夜操| 欧美丝袜第三区| 久久久久无码国产精品| 久久久久久麻豆| 国产成人精品综合久久久久99 | 亚洲黄色小视频在线观看| 综合久久精品| 欧美日韩一区二区三区在线观看免| 性欧美在线看片a免费观看| 1区2区3区在线观看| 精品国内二区三区| 在线免费看av片| 岛国av午夜精品| 国产精品白丝喷水在线观看| 91首页免费视频| 中国老熟女重囗味hdxx| 日本午夜精品一区二区三区电影| 国产精品69久久久| 国产韩国精品一区二区三区| 欧美国产二区| xxxx日韩| 亚洲一区二区少妇| 99精品在免费线偷拍| 98精品国产高清在线xxxx天堂| 免费黄色网址在线观看| 亚洲欧洲国产精品| 天天爱天天干天天操| 日韩一区二区影院| 91影院在线播放| 在线观看欧美日本| 久久不卡免费视频| 亚洲自拍与偷拍| 成人一级黄色大片| 中文字幕精品三区| 少妇真人直播免费视频| 北岛玲一区二区三区四区| 久久久久久无码精品人妻一区二区| 麻豆一区二区在线| 嫩草av久久伊人妇女超级a| 国产偷自视频区视频一区二区| 老司机激情视频| 日韩精品成人在线观看| 国产精品青草久久久久福利99| 日韩伦理福利| 国内精品久久久久伊人av| a级网站在线播放| 日韩在线www| 91亚洲欧美| 中文字幕日韩av电影| 国产天堂在线| 亚洲天堂av综合网| 国产黄色在线| 亚洲视频一区二区| 成人在线免费公开观看视频| 国产亚洲欧美另类中文| 国产情侣激情自拍| 欧美精品一二三| 中文字幕免费在线看| 欧美亚州韩日在线看免费版国语版| www.com国产| 中文字幕中文乱码欧美一区二区| 第一次破处视频| 中文字幕免费一区| 永久av免费网站| 亚洲三级电影网站| 青娱乐91视频| 亚洲成a人片综合在线| 日韩免费一二三区| 黄色91在线观看| 日批视频免费在线观看| 在线中文字幕一区二区| 中文字幕免费高清在线观看| 678五月天丁香亚洲综合网| 国产黄色大片网站| 亚洲国产精品va在线| 男操女在线观看| 视频直播国产精品| 在线观看男女av免费网址| 国内外成人免费激情在线视频 | 国产精品自拍偷拍| 国产第一亚洲| y111111国产精品久久婷婷| 日韩福利视频一区| 亚洲免费精品视频| 狠狠入ady亚洲精品| 欧美三级午夜理伦三级| 麻豆91精品91久久久的内涵| 国产九九九视频| 97精品久久久午夜一区二区三区 | 蜜桃视频在线观看视频| 日韩在线中文视频| 黄页在线观看免费| 日韩免费av片在线观看| 91精品福利观看| 九九九九九精品| 99久久精品国产亚洲精品| cao在线观看| 蜜桃视频免费观看一区| 韩国三级视频在线观看| 国产清纯美女被跳蛋高潮一区二区久久w | 成人乱码一区二区三区 | 在线综合视频播放| 日韩有码电影| 两个人的视频www国产精品| 女人让男人操自己视频在线观看 | 久久91亚洲人成电影网站| 天堂资源在线| www.成人av.com| 欧美国产美女| 日本一区高清在线视频| 亚洲国产不卡| 青青青国产在线视频| 国产999精品久久久久久| 欧美人与性囗牲恔配| 亚洲制服丝袜一区| 在线观看毛片网站| 国产丝袜一区二区| 女人天堂av在线播放| 国产精品免费小视频| 日本妇女一区| 大胆欧美熟妇xx| 久久国产精品99久久人人澡| 日韩 中文字幕| 一区二区三区精品视频在线| 中文字幕在线日亚洲9| 日韩精品视频在线| 久久不射影院| caoporen国产精品| 亚洲成av人片乱码色午夜| 国产精品无码av无码| 99精品国产99久久久久久白柏| 亚洲最大的黄色网址| 欧美日韩国产成人在线免费| 黄色在线网站| 欧美一级在线亚洲天堂| www.豆豆成人网.com| 狠狠精品干练久久久无码中文字幕| 美女免费视频一区二区| 无码人妻精品一区二区中文| 精品久久香蕉国产线看观看亚洲| 亚洲黄色小说网| 欧美日本国产在线| 日韩欧洲国产| 成人免费看片'免费看| 国产精品影视网| 在线免费观看亚洲视频| 91精品国产欧美日韩| 黄色小网站在线观看| 成人亲热视频网站| 91精品国产成人观看| 特黄特黄一级片| 亚洲免费视频中文字幕| 99精品在线看| 欧美国产日韩在线| 国产精品黄网站| 国产免费黄色一级片| av成人免费在线| 久久国产黄色片| 亚洲天堂男人天堂| 99riav视频一区二区| 伊人天天久久大香线蕉av色| 久久精品999| 黄色片在线观看网站| 精品国产免费一区二区三区香蕉| 波多野结衣久久| 久久国产精品一区二区三区| 免费亚洲网站| 五月天精品在线| 9191国产精品| gogo久久| 欧美在线3区| 麻豆精品国产传媒mv男同| 免费精品在线视频| 欧美一级精品大片| 九色porny视频在线观看| 欧美精品一区二区视频 | 四虎国产精品永久免费观看视频| 一级精品视频在线观看宜春院 | 日韩中文视频免费在线观看| 国产免费av国片精品草莓男男 | 日韩中文欧美在线| 熟女少妇a性色生活片毛片| 精品乱人伦小说| 日韩伦理三区| 黄色网络在线观看| 99国内精品久久| 亚洲天堂中文字幕在线| 欧美大片第1页| 国产乱码精品一区二区亚洲 | www.性欧美| 亚洲中文字幕无码爆乳av| 久久亚洲国产成人| 日韩高清三区| 亚洲视频在线不卡| 精品欧美激情精品一区| 麻豆传媒在线免费看| 国产精品一 二 三| 奇米影视一区二区三区| 久久免费视频播放| 一区二区三区回区在观看免费视频| 九九99久久精品在免费线bt| 免费欧美一级视频| 综合网在线视频| 日韩电影网址| 97超级碰碰| 日本成人在线视频网站| 日本一区二区三区四区五区| 日韩在线观看精品| 亚洲丁香日韩| 毛片在线播放视频|