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

iPhone開發(fā)中數(shù)據(jù)庫使用教程

移動(dòng)開發(fā) iOS
本文主要介紹iphone中關(guān)于數(shù)據(jù)庫的使用,由于第一個(gè)iPhone程序就使用到了數(shù)據(jù)庫,所以首先來說下iPhone數(shù)據(jù)庫的使用。

iPhone開發(fā)中數(shù)據(jù)庫使用是本文要介紹的內(nèi)容,iPhone使用的是sqlite數(shù)據(jù)庫,我用了firefox的插件Sqlite Manager來管理sqlite,這個(gè)插件很好用,可以很方便的進(jìn)行視圖化的創(chuàng)建以及管理sqlite。廢話不多說,進(jìn)入正題。

要使用sqlite首先要在Frameworks中引入libsqlite3.0.dylib這個(gè)文件,具體步驟我就略過了,然后創(chuàng)建數(shù)據(jù)庫,建好后將數(shù)據(jù)庫添加到Resources目錄下(記得勾選Copy items into ...這個(gè)選項(xiàng)),現(xiàn)在準(zhǔn)備工作都已經(jīng)做好,下面進(jìn)入代碼編寫。

為了方便使用,以及以后的維護(hù),我在這里創(chuàng)建了一個(gè)類將數(shù)據(jù)庫的相關(guān)代碼進(jìn)行了封裝。創(chuàng)建一個(gè)NSObject類,我在這里取名為GADatabase,然后在實(shí)現(xiàn)文件中添加以下代碼:

  1. #import <sqlite3.h> 
  2.  
  3. id getColValue(sqlite3_stmt *stmt,int iCol) {  
  4.     int type = sqlite3_column_type(stmt, iCol);  
  5.     switch (type) {  
  6.         case SQLITE_INTEGER:  
  7.             return [NSNumber numberWithInt:sqlite3_column_int(stmt, iCol)];  
  8.             break;  
  9.         case SQLITE_FLOAT:  
  10.             return [NSNumber numberWithDouble:sqlite3_column_double(stmt, iCol)];  
  11.             break;  
  12.         case SQLITE_TEXT:  
  13.             return [NSString stringWithUTF8String:sqlite3_column_text(stmt, iCol)];  
  14.             break;  
  15.         case SQLITE_BLOB:  
  16.             return [NSData dataWithBytes:sqlite3_column_blob(stmt, iCol) length:sqlite3_column_bytes(stmt, iCol)];  
  17.             break;  
  18.         case SQLITE_NULL:  
  19.             return @"";  
  20.             break;  
  21.         default:  
  22.             return @"NONE";  
  23.             break;  
  24.     }  

在這里,我使用了C風(fēng)格的定義,并且定義在了@implementation之外以方便使用,有了這個(gè)函數(shù)在以后的數(shù)據(jù)提取時(shí)很方便,其中的數(shù)據(jù)類型可根據(jù)實(shí)際情況進(jìn)行增減。OK,現(xiàn)在在@implementation與@end之間添加下面的代碼以獲取iphone中sqlite的地址:

  1. + (NSString *)pathForDatabase {  
  2.     NSArray *arrayOfPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);  
  3.     NSString *path = [arrayOfPaths objectAtIndex:0];  
  4.     path = [path stringByAppendingPathComponent:@"yourDatabaseName.sqlite"];  
  5.     NSLog(path);  
  6.     NSFileManager *fileManager = [NSFileManager defaultManager];  
  7.     if(![fileManager fileExistsAtPath:path]){  
  8.         NSString *databaseSource = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"yourDatabaseName.sqlite"];  
  9.         if(![fileManager copyItemAtPath:databaseSource toPath:path error:nil]){  
  10.             return nil;  
  11.         }  
  12.     }  
  13.     return path;  

好了,現(xiàn)在可以寫sql語句了,我簡(jiǎn)單舉幾個(gè)例子:

查詢某一個(gè)字段:

  1. - (NSString *)select:(NSString *)Parameter {  
  2.     sqlite3 *database;  
  3.     sqlite3_stmt *stm;  
  4.     NSString *result = [NSString string];  
  5.     NSString *sql = [NSString stringWithFormat:@"SELECT columnName FROM table WHERE columnName='%@'", Parameter];  
  6.      
  7.     if(sqlite3_open([[GADatabase pathForDatabase] UTF8String], &database) == SQLITE_OK) {  
  8.         if(sqlite3_prepare_v2(database, [sql UTF8String], -1, &stm, NULL) == SQLITE_OK) {  
  9.             if(sqlite3_step(stm) == SQLITE_ROW) {  
  10.                 result = getColValue(stm, 0);  
  11.             }  
  12.         }  
  13.         sqlite3_finalize(stm);  
  14.     }  
  15.     sqlite3_close(database);  
  16.     return result;  

若查詢多字段,可以用一個(gè)數(shù)組并結(jié)合一個(gè)自定義類來存儲(chǔ),例:

  1. - (NSMutableArray *)selectUsers {  
  2.     sqlite3 *database;  
  3.     sqlite3_stmt *stm;  
  4.     NSMutableArray *result = [[NSMutableArray alloc] init];  
  5.     NSString *sql = @"SELECT * FROM users";  
  6.      
  7.     if(sqlite3_open([[GADatabase pathForDatabase] UTF8String], &database) == SQLITE_OK) {  
  8.         if(sqlite3_prepare_v2(database, [sql UTF8String], -1, &stm, NULL) == SQLITE_OK) {  
  9.             while(sqlite3_step(stm) == SQLITE_ROW) {  
  10.                 GAData *userObj = [[GAData alloc] init];  
  11.                 userObj.rId = getColValue(stm, 0);  
  12.                 userObj.userName = getColValue(stm, 1);  
  13.                 userObj.passWord = getColValue(stm, 2);  
  14.                 [result addObject:userObj];  
  15.                 [userObj release];  
  16.             }  
  17.         }  
  18.         sqlite3_finalize(stm);  
  19.     }  
  20.     sqlite3_close(database);  
  21.     return result;     

GAData的類定義如下:

  1. #import <Foundation/Foundation.h> 
  2. @interface GAData : NSObject {  
  3.     NSNumber *rId;  
  4.     NSString *userName;  
  5.     NSString *passWord;  
  6. }  
  7. @property(nonatomic, retain)NSNumber *rId;  
  8. @property(nonatomic, retain)NSString *userName;  
  9. @property(nonatomic, retain)NSString *passWord;  
  10. @end  
  11. #import "GAData.h"  
  12. @implementation GAData  
  13. @synthesize rId;  
  14. @synthesize userName;  
  15. @synthesize passWord;  
  16. @end 

向數(shù)據(jù)庫添加數(shù)據(jù):

  1. - (void)addUser:(GAData *)addUserObj {  
  2.     sqlite3 *database;  
  3.     NSString *sql = [NSString stringWithFormat:@"INSERT INTO users (userName, passWord) VALUES('%@','%@')",  
  4.                      addUserObj.userName, addUserObj.passWord];  
  5.      
  6.     int status = sqlite3_open([[GADatabase pathForDatabase] UTF8String], &database);  
  7.     if(status != SQLITE_OK) {  
  8.         return;  
  9.     }  
  10.     status = sqlite3_exec(database, [sql UTF8String], 0, 0, NULL);  
  11.     if(status != SQLITE_OK) {  
  12.         return;  
  13.     }  
  14.     sqlite3_close(database);  

刪除,修改與添加類似,無非是sql語句的不同,就不再舉例了,下面我再說下sqlite中的時(shí)間函數(shù),由于目前為止我還只用到了關(guān)于計(jì)算天數(shù)的函數(shù),所以其他的我就不介紹了,大家可以在網(wǎng)上搜索一下,看下面這條sql語句:

  1. SELECT columnName FROM table WHERE (julianday(date(columnName))-julianday(date('now')))>10 

julianday()這個(gè)函數(shù)會(huì)返回一個(gè)天數(shù),從格林威治時(shí)間公元前4714年11月24號(hào)開始算起。date()函數(shù)返回一個(gè)以“YYYY-MM-DD”為格式的日期。因此上面那條語句也就不難理解了。

關(guān)于數(shù)據(jù)庫方面的我就暫時(shí)寫這么多了,有不夠好的地方或者錯(cuò)誤的地方歡迎大家指出來,大家一起學(xué)習(xí)嘛。最后,我再提醒一句,如果修改了Resources目錄下的數(shù)據(jù)庫內(nèi)容,需要將原先編譯好的程序刪除掉,重新編譯,或者找到程序運(yùn)行時(shí)的路徑,刪掉Documents文件夾下的數(shù)據(jù)庫文件,再重新編譯運(yùn)行,只有這樣,你程序中的數(shù)據(jù)庫才會(huì)更新,切記!

小結(jié):iPhone開發(fā)中數(shù)據(jù)庫使用教程的內(nèi)容介紹完了,希望本文對(duì)你有所幫助!

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

2011-08-02 16:16:08

iPhone開發(fā) SQLite 數(shù)據(jù)庫

2011-07-21 15:05:14

iPhone 數(shù)據(jù)庫

2011-07-27 10:16:41

iPhone SQLite 數(shù)據(jù)庫

2011-08-11 17:00:33

iPhone數(shù)據(jù)庫SQLite

2011-08-05 16:10:31

iPhone 網(wǎng)絡(luò) NSURLConne

2011-07-07 16:42:38

iPhone Sqlite3 數(shù)據(jù)庫

2013-03-27 09:47:01

Android開發(fā)SQAndroid SDK

2011-08-02 16:43:26

iPhone開發(fā) Ssqlite3 數(shù)據(jù)庫

2011-08-10 15:48:10

iPhone網(wǎng)絡(luò)

2011-03-21 13:53:45

數(shù)據(jù)庫開發(fā)書寫規(guī)范

2011-08-22 10:31:40

iPhone開發(fā)BSD Socket

2011-08-15 13:44:07

iPhone開發(fā)UITableView

2011-08-30 12:59:52

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

2013-04-01 10:49:51

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

2011-07-08 14:58:16

iPhone Xcode iOS

2011-07-08 16:02:24

iphone

2011-08-10 18:24:22

iPhone 圖形 繪圖

2011-08-02 17:37:01

IPhone開發(fā) 環(huán)境搭建

2009-06-24 13:07:44

Android數(shù)據(jù)庫

2011-03-24 16:46:44

微軟Excel數(shù)據(jù)庫
點(diǎn)贊
收藏

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