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

深度解析iPhone開發之數據持久化

移動開發 iOS
在iPhone上面,有兩種方法可以來存儲數據,我們可以使用SQLite進行數據的持久化,另外值得一提的是Firefox是使用數據庫的方式保存的,同樣也是SQLite。

iphone在開發應用程序的時候,當然需要經常的實用數據庫進行數據的保存了,在移動設備上,我們可以使用文件,數據庫等方式去保存,為了能夠讓用戶無法使用其他的程序去修改,我這里認為使用數據庫的方式是一個很好的方式。在iPhone上面,我們可以使用SQLite進行數據的持久化。另外值得一提的是Firefox是使用數據庫的方式保存的,同樣也是SQLite。

在iPhone開發重,我們需要首先添加一個SQLite的庫,XCode本身就支持的,我們在左邊的Frameworks里面選擇Add,然后選擇Existing Frameworks,在彈出窗口中選擇SQLite的庫libsqlite3.0.dylib。

添加之后,我們就可以使用SQLite在iPhone中進行數據的保存,查詢,刪除等操作了。

現在我們可以寫一個SQLite的Helper文件,方便我們在其他的代碼中使用,頭文件(SqliteHelper.h)如下。

  1. #import <Foundation/Foundation.h> 
  2. #import “sqlite3.h“  
  3. #define kFileName @”mydatabase.sql”    
  4. @interface SqliteHelper : NSObject {  
  5. sqlite3 *database;   
  6. }  
  7. //創建表  
  8. - (BOOL)createTable;  
  9. //插入數據  
  10. (BOOL)insertMainTable:(NSString*) username insertPassword:(NSString*) password;  
  11. //查詢表  
  12. (BOOL)checkIfHasUser;   
  13. @end 

我們的代碼文件如下。

  1. #import “SqliteHelper.h“   
  2. @implementation SqliteHelper  
  3. (BOOL)createTable  
  4. {  
  5. NSArray *path = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);  
  6. NSString *paths = [[path objectAtIndex:0] stringByAppendingPathComponent:kFileName];  
  7. NSFileManager *fileManager = [NSFileManager defaultManager];  
  8. BOOL fileFinded = [fileManager fileExistsAtPath:paths];  
  9. NSLog(@”Database file path is %@“,paths);  
  10. if(fileFinded)  
  11. {  
  12.    NSLog(@”Database file existed“);  
  13. if(sqlite3_open([paths UTF8String],&database)!=SQLITE_OK)  
  14. {  
  15.    sqlite3_close(database);  
  16.    NSLog(@”Open Failed“);  
  17.    return NO;  
  18.   }  
  19. }else{  
  20.     NSLog(@”Database file is not existed“);  
  21. if(sqlite3_open([paths UTF8String],&database)!=SQLITE_OK)  
  22. {  
  23.    sqlite3_close(database);  
  24.    NSLog(@”Open Failed“);  
  25.    return NO;  
  26.   }  
  27. }  
  28. char *errorMsg;  
  29. NSString *createSQL = @”create table if not exists fields (userid integer primary key,username text,password text)“;  
  30. if(sqlite3_exec(database,[createSQL UTF8String],NULL,NULL,&errorMsg)!=SQLITE_OK)  
  31. {  
  32.    sqlite3_close(database);  
  33.    NSLog(@”Open failed or init filed“);  
  34.    return NO;  
  35. }  
  36.    return YES;  
  37. }  
  38. (BOOL)insertMainTable:(NSString*) username insertPassword:(NSString*) password  
  39. {  
  40.    char *errorMsg;  
  41.     NSString *createSQL = @”create table if not exists fields (userid integer primary key,username text,password text)“;  
  42.    if(sqlite3_exec(database,[createSQL UTF8String],NULL,NULL,&errorMsg)!=SQLITE_OK)  
  43. {  
  44.    sqlite3_close(database);  
  45.    NSLog(@”Open failed or init filed“);  
  46.    return NO;  
  47. }  
  48. NSString *insertData = [[NSString alloc] initWithFormat:@”insert or replace into fields 
  49. (userid,username,password) values (%d,’%@’,'%@’)“,0,username,password];  
  50. if(sqlite3_exec(database,[insertData UTF8String],NULL,NULL,&errorMsg)!=SQLITE_OK)  
  51. {  
  52.    sqlite3_close(database);  
  53.    NSLog(@”Open failed or failed to insert“);  
  54.    return NO;  
  55. }  
  56.    return YES;  
  57. }  
  58. (BOOL)checkIfHasUser  
  59. {  
  60.    NSString *getUserCountSQL = @”select * from fields“;  
  61.    sqlite3_stmt *statement;  
  62.    NSLog(@”checkIfHasUser“);  
  63. if(sqlite3_prepare_v2(database,[getUserCountSQL UTF8String],-1,&statement,nil)==SQLITE_OK)  
  64. {  
  65. //while(sqlite3_step(statement) == SQLITE_ROW)  
  66. //{  
  67. // int row = sqlite3_column_int(statement,0);  
  68. // char* rowData = (char*)sqlite3_column_text(statement,2);  
  69. // NSString *fieldName = [[NSString alloc] initWithFormat:@”show%d”,row];  
  70. // NSString *fieldValue = [[NSString alloc] initWithUTF8String:rowData];  
  71. //  
  72. // NSLog(@”fieldName is :%@,fieldValue is :%@”,fieldName,fieldValue);  
  73. // return [[NSString alloc] initWithFormat:@”fieldName is :%@,fieldValue is :%@”,fieldName,fieldValue];  
  74. //  
  75. // [fieldName release];  
  76. // [fieldValue release];  
  77. //}  
  78. //sqlite3_finalize(statement);  
  79. if(sqlite3_step(statement) == SQLITE_ROW)  
  80. {  
  81. NSLog(@”Have user“);  
  82. return YES;  
  83. }  
  84. }  
  85. NSLog(@”No user“);  
  86. return NO;  
  87. }  
  88. @end 

其中checkIfHasUser是檢查數據,這個方法中我注釋的是得到數據,因為我們這里只是check,所以不需要得到數據,直接看是否存在數據即可。上面的代碼雖然沒有過多的注釋,但是代碼本身已經很簡單了,上下文也非常清楚,所以我就不寫過多的注釋了。

【編輯推薦】

解析iphone多線程

智能數據倉庫的設計方法

非結構化數據庫與異構數據庫區別

讓數據庫飛起來 10大DB2優化技巧

WWDC傳聞分析:神秘的iPhone 4S以及iOS 5

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

2011-08-17 15:19:38

iPhone應用數據

2011-07-07 15:45:45

iPhone SQLite 數據

2023-10-12 13:01:29

Redis數據庫

2011-08-12 14:54:45

iPhone委托

2011-07-29 14:55:25

iPhone開發 動畫過渡

2011-07-29 15:09:48

iPhone Category

2011-08-02 18:07:03

iPhone 內省 Cocoa

2011-08-19 13:45:14

iPhone應用iPhone OS數據

2025-03-14 12:30:00

Redis RDBRedis數據庫

2011-08-12 11:23:47

iPhone窗口視圖

2011-07-18 14:23:40

iPhone 多任務

2022-03-02 21:53:57

Spring數據庫持久化Jar包

2024-03-26 00:03:08

Redis數據RDB

2011-08-11 17:00:33

iPhone數據庫SQLite

2011-08-10 10:10:21

iPhoneUIPopoverCo

2011-08-01 18:27:58

iPhone開發 UISearchBa

2011-07-27 17:02:12

Xcode iPhone 單元測試

2021-03-18 08:18:15

ZooKeeper數據持久化

2011-08-08 13:57:19

iPhone開發 打包 DEB

2011-08-11 10:03:43

iPhonecocoaNSRunLoop
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 99免费在线观看 | 日本成人三级电影 | www.色.com | 国产精品99久久免费观看 | 欧美精品一区二区在线观看 | av日韩在线播放 | 国产高清视频一区二区 | 日韩精品1区2区3区 国产精品国产成人国产三级 | 青娱乐一区二区 | 国产aⅴ精品| 日本特黄a级高清免费大片 特黄色一级毛片 | pacopacomama在线 | 国产日韩视频 | 国产激情视频网 | 日韩精品成人 | 在线观看成人 | 永久免费av | 欧美不卡一区二区三区 | 欧美一级片在线 | 国产成人精品一区二区三区在线观看 | 欧美激情亚洲激情 | 三级高清 | 亚洲欧美精品在线观看 | 91av亚洲 | 日韩一区中文字幕 | 久久久精 | 操久久| 欧美色人| 久久tv在线观看 | 久久国产精品视频免费看 | 99精品网| 久久精品欧美一区二区三区麻豆 | 亚洲国产精品人人爽夜夜爽 | 亚洲天堂二区 | 国产中文字幕在线 | 亚洲码欧美码一区二区三区 | 九九久久精品视频 | 久久视频免费观看 | 欧美一区二区小视频 | 亚洲综合一区二区三区 | 久久九精品 |