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

iOS嵌入式數據庫SQLite3使用簡析

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

1. Sqlite3數據類型及存儲類

每個存放在sqlite數據庫中(或者由這個數據庫引擎操作)的值都有下面中的一個存儲類:

(1)NULL,值是NULL

(2)INTEGER,值是有符號整形,根據值的大小以1,2,3,4,6或8字節存放

(3)REAL,值是浮點型值,以8字節IEEE浮點數存放

(4)TEXT,值是文本字符串,使用數據庫編碼(UTF-8,UTF-16BE或者UTF-16LE)存放

(5)BLOB,只是一個數據塊,完全按照輸入存放(即沒有準換)

:①Sqlite沒有單獨的布爾存儲類型,它使用INTEGER作為存儲類 型,0為false,1為true

 ②Sqlite沒有另外為存儲日期和時間設定一個存儲類集,內置的sqlite日期和時間函數能夠將日期和時間以TEXT,REAL或INTEGER形式存放

TEXT 作為IS08601字符串("YYYY-MM-DD HH:MM:SS.SSS")
REAL 從格林威治時間11月24日,4174 B.C中午以來的天數
INTEGER 從 1970-01-01 00:00:00 UTC以來的秒數

2. Sqlite3函數功能簡介

1)基本函數及結構體

sqlite3        *pdb  //數據庫句柄,跟文件句柄FILE很類似
sqlite3_stmt  *stmt  //這個相當于ODBC的Command對象,用于保存編譯好的SQL語句
sqlite3_open()       //打開數據庫
sqlite3_exec()       //執行非查詢的sql語句
sqlite3_prepare()    //準備sql語句,執行select語句或者要使用parameter bind時 ,                             用這個函數(封裝了sqlite3_exec).
sqlite3_step()       //在調用sqlite3_prepare后,使用這個函數在記錄集中移動。
sqlite3_close()      //關閉數據庫文件

2)綁定函數

int sqlite3_bind_null(sqlite3_stmt*, int);
int sqlite3_bind_int(sqlite3_stmt*, int, int);
int sqlite3_bind_text(sqlite3_stmt*, int, const char*, int n, void(*)(void*));
int sqlite3_bind_blob(sqlite3_stmt*, int, const void*, int n, void(*)(void*));

3)取值函數
sqlite3_column_text(), 取text類型的數據
sqlite3_column_blob(),取blob類型的數據
sqlite3_column_int(), 取int類型的數據

3. Sqlite3使用步驟

1) 首先獲取iPhone上Sqlite 3 的數據庫文件的地址
2) 打開Sqlite 3 的數據庫文件
3) 定義SQL文
4) 邦定執行SQL所需要的參數
5) 執行SQL文,并獲取結果
6) 釋放資源
7) 關閉Sqlite 3 數據庫。

4. Sqlite3數據操作

由于整個例子代碼比較繁瑣,這里只列出數據庫操作的部分代碼作為參考:

1.添加開發包libsqlite3.0.dylib

首先是設置項目文件,在項目中添加iPhone版的sqlite3的數據庫的開發包,在項目下的Frameworks點擊右鍵,然后選擇libsqlite3.0.dylib文件。

libsqlite3.0.dylib文件地址:

/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS2.2.sdk/usr/lib/libsqlite3.0.dylib

2.獲取sqlite3的數據庫文件地址

  1. //數據庫路徑  
  2. -(NSString*)databasePath  
  3. NSArray *path = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);  
  4. NSString *pathname = [path objectAtIndex:0];  
  5. return [pathname stringByAppendingPathComponent:@”database.sqlite3”];  
  6. }  

3.打開數據庫

  1. - (BOOL)openDatabase  
  2.   
  3. {  
  4.     if (sqlite3_open([[self databasePath] UTF8String],&database) != SQLITE_OK)  
  5.     {  
  6.         sqlite3_close(database);  
  7.         printf("failed to open the database");  
  8.         return NO; 
  9. else   
  10.     {  
  11.         printf("open the database successfully");  
  12.         return YES;  
  13.     } 

4.創建表

  1. //創建TimerTable表  
  2.   
  3. - (BOOL)createTimerTable  
  4. {  
  5.     if ([self openDatabase]==YES) 
  6.     {  
  7.         char *erroMsg;  
  8.         NSString *createSQL = [NSString stringWithFormat:@"CREATE TABLE IF NOT EXISTS %@(timerid INTEGER PRIMARY KEY AUTOINCREMENT,time INTEGER,remaintime INTEGER,iconuri BLOB,vibrate INTEGER,status INTEGER,message TEXT)",TableName];  
  9.         if (sqlite3_exec(database, [createSQL UTF8String], NULL, NULL, &erroMsg)!= SQLITE_OK) 
  10.         {  
  11.             sqlite3_close(database);  
  12.             printf("create table faild");  
  13.             return NO;  
  14.         }  
  15.         else  
  16.         {  
  17.             printf("table was created");  
  18.             return YES;  
  19.         } 
  20.     }  
  21.     else  
  22.         return NO; 
  23. }  

5.添加數據

  1. //添加Timer  
  2.   
  3. - (BOOL)insertTimer:(TimerInfo *)timerInfo  
  4. {    
  5.     bool isOpen=[self openDatabase];  
  6.     if (isOpen!=YES)  
  7. {  
  8.       return NO;  
  9.     }  
  10.     sqlite3_stmt *statement;  
  11.     static char *insertTimerSql="INSERT INTO TimerTable(time,remaintime,iconuri,vibrate,status,message,type) VALUES (?,?,?,?,?,?)";  
  12.     if (sqlite3_prepare_v2(database,insertTimerSql,-1,&statement,NULL)!= SQLITE_OK)  
  13.     {  
  14.         NSLog(@"Error:Failed to insert timer");  
  15.         return NO;  
  16.     }  
  17.     sqlite3_bind_int(statement,1,timerInfo.time);//timerInfo是一個封裝了相關屬性的實體類對象  
  18.     sqlite3_bind_int(statement,2,timerInfo.remainTime);  
  19.     sqlite3_bind_text(statement,3,[timerInfo.iconuri UTF8String],-1,SQLITE_TRANSIENT);  
  20.     sqlite3_bind_int(statement,4,timerInfo.vibrate);  
  21.     sqlite3_bind_int(statement,5,timerInfo.status);  
  22.     sqlite3_bind_text(statement,6,[timerInfo.message UTF8String],-1,SQLITE_TRANSIENT);  
  23.     int success=sqlite3_step(statement);  
  24.     sqlite3_finalize(statement);  
  25.     if(success==SQLITE_ERROR)  
  26.     {  
  27.         NSLog(@"Error:fail to insert into the database with message.");  
  28.         return NO;  
  29.     }  
  30.     NSLog(@"inserted one timer");  
  31.     return YES;  

6.查詢數據

  1. //查詢數據庫中所有的TimerInfo,返回一個包含所有TimerInfo的可變數組  
  2.   
  3. -(NSMutableArray *)getAllTimers  
  4. {  
  5.     NSMutableArray *arrayTimers=[[NSMutableArray alloc] init];  
  6.     NSString *queryStr=@"SELECT * FROM TimerTable";  
  7.     sqlite3_stmt *statement;  
  8.     if (sqlite3_prepare_v2(database, [queryStr UTF8String], -1, &statement, NULL)!=SQLITE_OK)  
  9.     {  
  10.         printf("Failed to get all timers!\n");    
  11.     }  
  12.     else  
  13.     {  
  14.         while (sqlite3_step(statement)==SQLITE_ROW)  
  15.         {  
  16.             TimerInfo *timerInfo=[[TimerInfo alloc] init]; 
  17.             timerInfo.timerId =sqlite3_column_int(statement,0); 
  18.             timerInfo.time =sqlite3_column_int(statement,1);  
  19.             timerInfo.remainTime=sqlite3_column_int(statement,2);  
  20.             timerInfo.vibrate =sqlite3_column_int(statement,4); 
  21.             timerInfo.status = sqlite3_column_int(statement,5);  
  22.             char *messageChar=sqlite3_column_text(statement,6); 
  23.             if (messageChar==NULL)  
  24.                 timerInfo.message=nil;  
  25.             else  
  26.                 timerInfo.message =[NSString stringWithUTF8String:messageChar];  
  27.             [arrayTimers addObject:timerInfo];  
  28.             [timerInfo release];  
  29.         }  
  30.     }  
  31.     sqlite3_finalize(statement);  
  32.     NSLog(@"arrayTimersCount: %i",[arrayTimers count]); 
  33.     return arrayTimers; 
  34. }  

此外,還有數據庫數據的更新及其刪除操作就不再依依列出,它們之間只是執行的SQL文不同,其他部分的代碼較為類似。

運行效果:(具體頁面控件及事件:略)

在這里只是做下小結,其中難免有說的不對的地方,所以希望大家多多給予指正。

責任編輯:閆佳明 來源: blog.51cto
相關推薦

2020-09-18 09:15:22

數據庫Sqlite3進階

2013-04-10 14:21:35

2013-09-02 14:41:05

Java嵌入式SQLite

2010-09-09 16:42:18

嵌入式IPv6協議棧

2020-09-17 09:40:20

數據庫Sqlite3命令

2011-03-07 09:57:24

Perst嵌入式數據庫

2012-03-06 12:59:11

iOS SQLite3iOSSQLite3

2011-07-07 16:42:38

iPhone Sqlite3 數據庫

2012-03-06 10:17:45

iOS SQLite3iOSSQLite3

2017-09-17 12:21:52

移植Linux系統sqlite3

2011-03-11 11:19:05

嵌入式數據庫

2011-06-02 10:24:48

Android SQLite

2012-03-06 09:50:24

Android SQLAndroidSQLite3

2013-09-22 10:39:00

MeayunDB

2009-01-18 15:36:04

2011-07-08 10:45:19

SqlceSqlCeConnec

2013-05-03 13:42:20

iOS開發SQLite3存儲讀取

2020-07-31 08:07:54

Python開發數據庫

2010-03-23 09:08:05

2009-11-19 09:35:36

eXtremeDB嵌入式實時數據庫McObject
點贊
收藏

51CTO技術棧公眾號

97人人做人人爱| 日韩av一区在线| 在线观看18视频网站| 亚洲精品久久久久久久久久| 在线视频观看日韩| 亚洲无限av看| 中文字幕一区二区在线观看视频| 国内老司机av在线| 久久色在线观看| 成人免费xxxxx在线观看| 久久精品99国产精| 精品国产123区| 日韩欧美一区二区在线视频| 久久精品99国产| 91最新在线视频| 国产午夜精品久久久久久免费视 | 免费久久久一本精品久久区| 中文字幕有码无码人妻av蜜桃| 永久91嫩草亚洲精品人人| 国产视频综合在线| 中国特级黄色片| 精品176极品一区| 五月婷婷激情综合网| 超碰免费在线公开| 免费国产在线视频| 成人av在线看| 51国偷自产一区二区三区的来源| 91精品国产乱码久久久张津瑜| 天天天综合网| 一本色道久久88精品综合| 国产国语老龄妇女a片| 另类一区二区| 日本电影亚洲天堂一区| 99热亚洲精品| 亚洲www色| 中文字幕亚洲视频| 日本一区免费在线观看| 亚洲av无码乱码国产精品| 免费观看在线综合| 日本电影亚洲天堂| 国产乡下妇女做爰视频| 在线中文一区| 久久手机免费视频| 亚洲一级理论片| 教室别恋欧美无删减版| 日韩精品中文字幕在线| 国产不卡一二三| 91精品国产乱码久久久竹菊| 69精品人人人人| 天天干天天操天天做| 精品成人av| 在线精品观看国产| 国产av人人夜夜澡人人爽| 美女福利一区二区三区| 欧美色另类天堂2015| 国产深夜男女无套内射| a'aaa级片在线观看| 亚洲综合区在线| 人人妻人人澡人人爽欧美一区| 老司机精品影院| 亚洲欧美另类在线| www.男人天堂网| heyzo高清在线| 精品久久香蕉国产线看观看亚洲 | 日韩成人免费在线| 国产精品jizz在线观看麻豆| 亚洲中文字幕无码爆乳av| 日韩国产欧美一区二区三区| 国产精品大片wwwwww| 国产精品传媒在线观看| 老司机精品视频在线| 91精品在线看| www.五月激情| av在线播放成人| 欧美一区国产一区| 69av亚洲| 夜夜操天天操亚洲| 激情伊人五月天| 欧美成人影院| 欧美日韩亚洲另类| 91精品国产高清91久久久久久| 一区二区日韩| 亚洲九九九在线观看| 日本女人性生活视频| 欧美福利网址| 午夜精品久久久久久久99热浪潮| 国产精品男女视频| 麻豆成人在线观看| 国产精品美女久久久久av福利| 性xxxxbbbb| 中文字幕av一区二区三区高| 色乱码一区二区三区熟女| 欧美亚洲天堂| 一本久久精品一区二区| 亚洲精品中文字幕乱码无线| 96sao在线精品免费视频| 性xx色xx综合久久久xx| 影音先锋中文在线视频| 久久精品人人| 国产精品美女免费| 国产女人18毛片水真多| eeuss鲁片一区二区三区在线观看| 欧美精品二区三区四区免费看视频 | 老熟女高潮一区二区三区| 亚洲传媒在线| 九九久久久久久久久激情| 无码人妻丰满熟妇区五十路| 国产一区二区不卡| 欧美乱偷一区二区三区在线| 久久77777| 色伊人久久综合中文字幕| 17c国产在线| 希岛爱理av免费一区二区| 插插插亚洲综合网| 乱子伦一区二区三区| 成人激情av网| 亚洲欧美日韩国产成人综合一二三区| 9999在线视频| 91精品一区二区三区在线观看| 偷偷色噜狠狠狠狠的777米奇| 欧美电影一区| 日本伊人精品一区二区三区介绍| www.av网站| 国产精品色哟哟网站| 草草久久久无码国产专区| 亚洲成人黄色| 久久视频在线看| 日本丰满少妇做爰爽爽| 99国产精品久久久久久久久久久 | 在线欧美不卡| 亚洲自拍av在线| 在线激情小视频| 色综合天天做天天爱| 不许穿内裤随时挨c调教h苏绵| heyzo久久| 国产国语刺激对白av不卡| 色综合免费视频| 亚洲成a人在线观看| 国产人妻精品久久久久野外| 99久久九九| 国产精品露脸av在线| 国产午夜在线观看| 91国偷自产一区二区开放时间 | 亚洲天堂avav| 国产欧美一区二区精品婷婷| 国产三区在线视频| 日韩有码一区| 欧美在线亚洲在线| 飘雪影院手机免费高清版在线观看 | 2021天堂中文幕一二区在线观| 日韩免费视频一区| 麻豆疯狂做受xxxx高潮视频| 国产福利精品导航| www.xxx麻豆| 超碰在线一区| 韩国精品久久久999| 少妇精品高潮欲妇又嫩中文字幕 | 国产精品69久久久| 高清日韩欧美| 91po在线观看91精品国产性色| 欧洲精品久久一区二区| 激情成人在线视频| 亚洲精品乱码久久久久久久| 亚洲欧美日本国产专区一区| 欧美一区2区三区4区公司二百| 婷婷综合六月| 在线丨暗呦小u女国产精品| 中文字幕人妻互换av久久| 中文字幕成人网| 亚洲精品在线网址| 亚洲狠狠婷婷| 欧美日韩精品免费在线观看视频| 日本欧美韩国| 久久精品国产96久久久香蕉| 国产丝袜在线视频| 婷婷开心久久网| 国产jjizz一区二区三区视频| 日本午夜精品视频在线观看| 欧美日韩一级在线| 成人av动漫| 国产成人jvid在线播放| 天堂中文8资源在线8| 日韩精品一区二区三区中文不卡| 日本亚洲色大成网站www久久| www精品美女久久久tv| 深夜黄色小视频| 欧美黄色一区| 欧美极品jizzhd欧美| 91传媒免费视频| 日韩一区国产在线观看| 成人手机在线播放| 免费看的黄色大片| 国产探花在线观看视频| 久久av无码精品人妻系列试探| 亚洲精品成人av久久| 99久久精品国产亚洲| 国产精品自拍视频一区| 欧洲在线一区| 国产福利精品在线| wwwav在线| 亚洲丁香婷深爱综合| 中文字幕免费高清网站| 亚洲精品中文字幕在线观看| 亚洲天堂资源在线| 久久福利视频一区二区| 国产中文字幕乱人伦在线观看| 精品99久久| 99久久精品免费看国产一区二区三区 | 不卡av播放| 欧美大尺度激情区在线播放| 日本私人网站在线观看| 欧美v日韩v国产v| 一级一级黄色片| 精品久久久久久中文字幕| 国产老头老太做爰视频| 国产亚洲一区二区三区| 无码人妻精品一区二区三| 久久99国产精品免费网站| 无码精品国产一区二区三区免费| 欧美日本一区二区高清播放视频| 天天综合色天天综合色hd| 欧美久久精品| 99理论电影网| 99亚洲男女激情在线观看| 国产成人jvid在线播放| 日韩脚交footjobhdboots| 欧美高跟鞋交xxxxhd| 欧美人xxx| 国产午夜精品视频| 免费黄网站在线观看| 日韩激情av在线免费观看| www三级免费| 欧美一级爆毛片| 国产精品熟女久久久久久| 欧美在线不卡视频| 久久精品五月天| 午夜精品福利一区二区三区蜜桃| 欧美成人一二三区| 亚洲欧美日韩在线不卡| 男人的午夜天堂| 中文字幕成人av| 卡一卡二卡三在线观看| 久久综合九色综合97婷婷女人 | 在线观看毛片av| 日本高清视频一区二区| 精品人妻一区二区三区潮喷在线| 午夜电影久久久| 97免费在线观看视频| 午夜欧美2019年伦理| 动漫精品一区一码二码三码四码| 夜夜嗨av一区二区三区中文字幕| 亚洲成人生活片| 亚洲精品国产高清久久伦理二区 | 精品福利一区二区| 日韩精品一卡二卡| 亚洲国产wwwccc36天堂| 国语对白一区二区| 亚洲mv大片欧洲mv大片精品| 久草视频精品在线| 色综合天天在线| 五月婷婷激情五月| 欧美日韩日日夜夜| 国产麻豆免费观看| 欧美tk—视频vk| 人妻夜夜爽天天爽| 精品调教chinesegay| 成人精品一区| 久久久精品视频在线观看| 18av在线播放| 91精品国产高清久久久久久久久| 在线观看v片| 国产精品视频播放| 日韩三级精品| 精品日本一区二区三区在线观看| 男男gay无套免费视频欧美| 亚洲精品欧美精品| 亚洲欧美一级二级三级| 欧美一级视频免费看| 亚洲在线视频| 午夜免费福利视频在线观看| 国产成人免费在线观看不卡| 国产熟女高潮一区二区三区| 国产日韩在线不卡| 国产黄色的视频| 精品成人久久av| 一区二区视频免费| 日韩精品专区在线影院重磅| 秋霞av在线| 欧美老妇交乱视频| gogo亚洲高清大胆美女人体| 91麻豆桃色免费看| 天海翼亚洲一区二区三区| 亚洲欧洲精品在线| 亚洲国产欧美国产综合一区| 天天操天天爽天天射| 国产很黄免费观看久久| 国产一二三四五区| 亚洲专区一二三| 久久精品99北条麻妃| 欧美xxx久久| av网页在线| 8050国产精品久久久久久| 婷婷成人av| 久久综合九色综合久99| 欧美ab在线视频| 狠狠热免费视频| 91玉足脚交白嫩脚丫在线播放| 久久嫩草捆绑紧缚| 精品国产91久久久| 国产黄色一级大片| 中文字幕在线日韩| av资源亚洲| 国产一区精品视频| 欧美淫片网站| 久热精品在线播放| 91色porny在线视频| 青青草国产在线观看| 91国偷自产一区二区三区观看| 色婷婷av一区二区三区之e本道| www.亚洲人.com| 经典三级一区二区| 狠狠色综合一区二区| 欧美午夜不卡| 中文字幕一区二区在线观看视频 | 欧美日韩精品在线观看视频| 在线视频欧美精品| 色天堂在线视频| 国a精品视频大全| 日韩一区二区三区色| 曰韩不卡视频| 秋霞午夜av一区二区三区| 免费观看av网站| 欧美日韩激情视频8区| 黄色一级大片在线免费看国产一 | 精品久久久三级丝袜| 好操啊在线观看免费视频| 国产精品精品视频一区二区三区| 日韩一级电影| 日韩黄色片视频| 91社区在线播放| 日韩aaaaaa| 亚洲国产精品小视频| 成人影音在线| 国产视频一区二区不卡| 亚洲图片在线| 特级特黄刘亦菲aaa级| 亚洲图片欧美综合| 四虎精品一区二区三区| 久久青草福利网站| 你懂的在线观看一区二区| 欧美精品久久久久久久久久久| 国产成a人亚洲| 亚洲国产精品午夜在线观看| 亚洲精品电影网在线观看| 国产污视频在线播放| 免费在线一区二区| 日韩中文字幕av电影| 纪美影视在线观看电视版使用方法| 欧美日韩视频在线第一区| 看女生喷水的网站在线观看| 91视频国产一区| 午夜电影亚洲| 亚洲欧美日韩色| 日韩欧美国产一区二区| 国产毛片在线| 成人在线小视频| 亚洲二区视频| 国产jk精品白丝av在线观看| 欧美亚洲高清一区| 黄色大片在线播放| 国产精品久久久久久免费观看| 亚洲国内精品| 男人的天堂av网| 日韩欧美中文字幕精品| 国产资源在线观看入口av| 日韩欧美精品久久| 国产一区欧美日韩| 国产成人在线播放视频| 一区二区国产精品视频| 动漫一区二区三区| 北条麻妃在线视频观看| 日本一区二区免费在线观看视频| 国产模特av私拍大尺度| 性欧美长视频免费观看不卡| 成人3d动漫在线观看| 日本少妇一级片| 在线观看日韩国产| 四虎影视成人| 日韩伦理一区二区三区av在线| 国产一区二区h| 久久久久久不卡| 久久精品国产亚洲精品| 老司机精品视频在线播放| 亚欧激情乱码久久久久久久久| 亚洲一区二区偷拍精品| 成年人免费在线视频| 成人一区二区在线| 毛片不卡一区二区| 日本最新中文字幕| 久久精品国产电影|