精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

中文字幕一区二区三区乱码| 国产美女被下药99| 日本护士做爰视频| 韩国三级一区| 日韩一区欧美一区| 国产女人水真多18毛片18精品 | 香蕉成人伊视频在线观看| 精品视频在线观看| 亚洲天堂手机在线| 亚洲精品字幕| 久久精品国亚洲| 亚洲一区二区三区综合| gogo大尺度成人免费视频| 亚洲成人免费影院| 国产精品99久久久久久大便| 日本一区高清| 国产综合久久久久久鬼色| 欧美一区二区三区艳史| 亚洲成人生活片| 欧洲专线二区三区| 亚洲精品国精品久久99热一 | 高清国产一区二区三区| 国产精品v片在线观看不卡| 久久久国产成人| 欧美国产美女| 国产亚洲成av人片在线观看桃| 午夜影院免费版| 国产成人免费精品| 日韩欧美精品网站| 国产欧美日韩网站| 18av在线播放| 国产精品国产三级国产有无不卡 | 久久成人综合| 精品亚洲一区二区三区| 日本黄色大片在线观看| 日韩欧乱色一区二区三区在线| 色婷婷精品久久二区二区蜜臀av| 久久国产午夜精品理论片最新版本| 久操免费在线| 国产精品久久综合| 三区精品视频观看| 久久精品a一级国产免视看成人| 成人一区在线观看| 粉嫩精品一区二区三区在线观看 | 亚洲一区二区三区精品在线观看| 色视频在线看| 91丨porny丨户外露出| 国产精品久久波多野结衣| 国产精品爽爽久久| 久色婷婷小香蕉久久| 国产精品扒开腿做| 五月婷婷激情视频| 天堂一区二区在线| 日韩免费观看在线观看| 亚洲影院在线播放| 美女久久一区| 日韩免费观看网站| 国产精品第6页| 日本美女一区二区三区视频| 国产精品678| 日本丰满少妇做爰爽爽| 日本aⅴ精品一区二区三区| 国产成人午夜视频网址| 波多野结衣不卡| 日本欧美在线看| 国产精品视频99| 国产又粗又黄又爽的视频| 激情图区综合网| 91深夜福利视频| 亚洲老妇色熟女老太| 岛国精品在线播放| 久久久99爱| 国产高清自拍视频在线观看| 中文字幕+乱码+中文字幕一区| 亚洲欧美日韩不卡一区二区三区| 日本综合在线| 夜夜嗨av一区二区三区中文字幕| 丁香六月激情婷婷| 成人性生活视频| 欧美日韩一区二区在线视频| 亚洲自拍第三页| 哺乳挤奶一区二区三区免费看| 亚洲第一色在线| www.久久国产| 99久久精品网站| 欧美精品videosex性欧美| 好看的av在线| 另类中文字幕网| 91在线短视频| 麻豆av电影在线观看| 自拍偷拍国产亚洲| 黄色免费福利视频| 亚洲高清影院| 亚洲高清不卡av| 日本性高潮视频| 欧美一区高清| 国产精品久久久久久久久久久久久久| 国产绿帽一区二区三区| 99久久综合狠狠综合久久| 视频一区视频二区视频| 里番在线播放| 欧美三级在线视频| 国内精品免费视频| 日韩黄色大片网站| 午夜免费久久久久| 国产日韩欧美一区二区东京热| 91美女在线观看| 国产一级片91| 欧美日韩尤物久久| 亚洲精品电影网在线观看| 亚洲AV成人无码网站天堂久久| 亚洲国产裸拍裸体视频在线观看乱了中文| 国产福利视频一区二区| 黄色片一区二区| 国产精品久久久久久久久图文区| 久久精品国产sm调教网站演员| 日韩成人精品一区二区三区| 国产视频久久久久久久| 久久久久久国产精品免费播放| 日韩黄色免费电影| 精品亚洲一区二区三区四区五区高| 国产精品扒开做爽爽爽的视频 | 欧美成人午夜剧场免费观看| 国产免费一区二区三区四区五区 | 欧美日韩精品一区二区三区蜜桃| 无码一区二区精品| 欧美激情在线| 成人午夜在线影院| 色网站免费在线观看| 色综合天天综合网天天看片| 在线xxxxx| 欧美成人嫩草网站| 成人美女免费网站视频| 大地资源中文在线观看免费版| 欧美性猛交xxxx黑人| 国产高潮视频在线观看| 国产尤物精品| 不卡的av一区| 在线看女人毛片| 欧美一区二区私人影院日本| 免费一级suv好看的国产网站| 天堂va蜜桃一区二区三区漫画版 | 天堂在线观看av| 一区二区三区精品视频在线| 超碰中文字幕在线观看| 亚洲最新av| 91精品国产高清久久久久久91裸体| 美女av在线播放| 91精品国产综合久久婷婷香蕉| 亚洲国产精品一区二区久久hs| 麻豆精品一二三| 一区二区三区四区不卡| 日本在线一区二区| 久久视频中文字幕| 成人av一区二区三区在线观看| 亚洲精品videosex极品| 人妻精油按摩bd高清中文字幕| 欧美深夜福利| 精品久久久久久综合日本 | 中文字幕亚洲精品乱码| 亚洲iv一区二区三区| 青春草在线视频| 亚洲国产精品99久久| 国产无套丰满白嫩对白| 久久久不卡网国产精品一区| 精品少妇无遮挡毛片| 青青草国产成人a∨下载安卓| 国产日韩欧美黄色| 亚洲精品白浆| 亚洲国产成人久久| 无码人妻av免费一区二区三区| 欧美激情一区二区三区在线| 国产女同无遮挡互慰高潮91| 国一区二区在线观看| 久久亚洲综合网| 韩国成人在线| 久久香蕉频线观| 可以免费观看的毛片| 欧美丝袜一区二区三区| 911国产在线| 成人午夜在线免费| 亚洲人成无码www久久久| 91综合久久一区二区| av激情久久| 欧美粗大gay| 精品国产一区av| 天堂在线观看免费视频| 欧美日韩中字一区| 国产精品99re| 国产精品久久久久久久岛一牛影视| aaaaaaaa毛片| 免费视频一区二区三区在线观看| 综合视频在线观看| 日韩大尺度在线观看| 国产日韩一区在线| 欧美久久天堂| 久久在线免费观看视频| 你懂的在线免费观看| 欧美一区二区三区在线电影| 国产精品久久久久久久久久久久久久久久久 | 国自产拍偷拍福利精品免费一 | 国产玉足榨精视频在线观看| 日韩一区和二区| 少妇太紧太爽又黄又硬又爽| 亚洲欧美激情在线| b站大片免费直播| 国产91丝袜在线18| 女同激情久久av久久| 国产模特精品视频久久久久| 穿情趣内衣被c到高潮视频| 国产一区二区电影在线观看| www.久久爱.cn| 日本精品久久| 国产99久久精品一区二区| 在线观看中文| www.久久久久久.com| 男人的天堂在线免费视频| 欧美第一区第二区| 一女二男一黄一片| 91高清视频在线| 日本熟妇一区二区| 亚洲精品国产精品乱码不99| 日本免费网站视频| 国产蜜臀av在线一区二区三区| av2014天堂网| 国产jizzjizz一区二区| 国产一级免费大片| 麻豆一区二区三| 国产视频手机在线播放| 久久午夜影视| 国产偷人视频免费| 久久av在线| 欧美a v在线播放| 99re国产精品| 奇米影视亚洲色图| 红桃视频欧美| 欧美做暖暖视频| 欧美国产先锋| 欧美另类videosbestsex日本| 99久久99久久精品国产片果冰| 亚洲欧美日韩另类精品一区二区三区| 久久成人高清| 日韩av一级大片| 国产日产精品一区二区三区四区的观看方式| 好看的日韩精品| 欧美电影在线观看完整版| 国产综合欧美在线看| 欧美调教在线| 欧美一级片免费观看| 黑人操亚洲人| 日本视频一区二区在线观看| 欧美日韩中字| 亚洲一区二区高清视频| 天天做天天爱天天综合网| 一区二区在线不卡| 欧美高清一区| 日韩精品 欧美| 亚洲综合三区| 黄色成人免费看| 狠狠色丁香久久婷婷综合_中| 婷婷中文字幕在线观看| 成人涩涩免费视频| 中文人妻一区二区三区| 欧美激情资源网| 国产大片免费看| 亚洲成a人v欧美综合天堂下载| 九一国产在线观看| 欧美午夜精品久久久久久孕妇| 夜夜躁很很躁日日躁麻豆| 欧美精品久久一区| 欧美一区二区黄片| 亚洲人成人99网站| 成人在线免费看片| 久久久中精品2020中文| 欧美性xxx| 91精品视频免费观看| 成午夜精品一区二区三区软件| 久久国产精品久久精品国产| 日韩成人三级| 国产成人在线小视频| 美女黄网久久| 天天操精品视频| 2020国产精品| 糖心vlog免费在线观看 | 久久久久久久久久一级| 在线成人免费视频| 色婷婷在线视频| 这里只有精品视频| 黑人极品ⅴideos精品欧美棵| 欧美综合激情网| 亚洲资源在线| 欧美大香线蕉线伊人久久| 我不卡影院28| 欧美在线观看成人| 国产乱码精品一品二品| 国产男男chinese网站| 亚洲乱码国产乱码精品精98午夜 | 久久久久久自在自线| 中文字幕在线视频一区二区三区| 99久久精品情趣| 999精品在线视频| 欧美日韩在线影院| 国产激情久久久久久熟女老人av| 亚洲免费伊人电影在线观看av| 大片免费在线看视频| 国产91露脸中文字幕在线| 中文字幕日韩高清在线| 日韩一区二区三区高清| 亚洲区第一页| 亚洲综合123| 国产欧美va欧美不卡在线| 国产污视频在线看| 日韩一区二区不卡| 成年人免费在线视频| 992tv成人免费影院| 国产精品99久久免费| 亚洲va久久久噜噜噜久久狠狠| 国产视频一区免费看| 欧美一级片在线免费观看| 国产精品视频免费| 无码视频在线观看| 亚洲免费av网址| av人人综合网| 成人黄色片视频网站| 亚洲精品国产首次亮相| 色一情一区二区| 国产欧美精品在线观看| 无码人妻丰满熟妇奶水区码| 亚洲黄色片网站| 国产探花在线观看| 99re在线国产| 国产主播一区| 国产成人精品一区二区三区在线观看 | 黄大色黄女片18免费| 欧美性猛交xxxx久久久| 色中色在线视频| 欧美激情亚洲综合一区| 57pao国产一区二区| 免费高清一区二区三区| 成人精品亚洲人成在线| 久久国产在线观看| 精品国产一区二区三区不卡| 欧洲中文在线| 高清国语自产拍免费一区二区三区| 欧美va亚洲va日韩∨a综合色| 亚洲黄色片免费看| 亚洲精品国产高清久久伦理二区| h片在线免费看| 九九热最新视频//这里只有精品| 免费观看亚洲天堂| www成人免费| 不卡的av在线播放| 国产免费av一区| 国产一区二区三区在线播放免费观看| 欧美无毛视频| 亚洲午夜精品国产| 国内精品伊人久久久久av影院| 欧美激情图片小说| 精品免费视频一区二区| 国产在线美女| 日本成人三级电影网站| 久久国产精品色婷婷| 最新一区二区三区| 精品日韩一区二区| 中文字幕色婷婷在线视频| 日本视频一区在线观看| 韩国一区二区视频| 精品无码久久久久久久久| 亚洲激情在线观看| 日韩制服诱惑| 黄色小视频大全| 99久久婷婷国产综合精品| 免费观看日批视频| 另类专区欧美制服同性| 福利片一区二区| www黄色在线| 亚洲美女在线一区| 四虎精品在永久在线观看| 国产精品亚洲激情| 欧美婷婷在线| 99久久精品免费视频| 日韩精品最新网址| 欧美www.| 国产成人亚洲综合无码| 久久久青草青青国产亚洲免观| 国产又黄又粗又硬| 91精品国产高清自在线看超| 久久综合国产| 欧美在线一级片| 欧美日本国产视频| 国产传媒在线观看| 中文字幕中文字幕一区三区| 99热这里都是精品| 一区二区三区免费在线| 97成人精品区在线播放| 999精品在线| 精品人妻无码一区二区三区| 日韩一区二区精品在线观看| 欧美一区久久久| www.欧美黄色|