《精通iOS开发·第六版》数据持久化基础知识之SOLite3持久化
2016-03-29 14:10
501 查看
《精通iOS开发·第六版》数据持久化基础知识之SOLite3持久化
1、BIDViewController.m文件#import "BIDViewController.h" #import <sqlite3.h> @interface BIDViewController () @property(strong,nonatomic)IBOutletCollection(UITextField)NSArray *lineFields; @end @implementation BIDViewController - (void)viewDidLoad { [super viewDidLoad]; //视图加载完成之后(通常是从nib文件加载),做一些额外的设置 sqlite3 *database; if (sqlite3_open([[self dataFilePath] UTF8String], &database) != SQLITE_OK) { sqlite3_close(database); NSAssert(0, @"Filed to open database"); } //有用的c语言小知识: //如果两个内联的字符串之间只有空白(包括换行符)而没有其他字符,那么这两个字符串会被连接为一个字符串。 NSString *createSQL = @"CREATE TABLE IF NOT EXISTS FIELDS" "(ROW INTEGER PRIMARY KEY,FIELD_DATA TEXT);"; char *errorMsg; if (sqlite3_exec(database, [createSQL UTF8String], NULL, NULL, &errorMsg) != SQLITE_OK) { sqlite3_close(database); NSAssert(0, @"Error creating table:%s",errorMsg); } NSString *query = @"SELECT ROW,FIELD_DATA FROM FIELDS ORDER BY ROW"; sqlite3_stmt *statement; if (sqlite3_prepare_v2(database, [query UTF8String], -1, &statement, nil) == SQLITE_OK) { while (sqlite3_step(statement) == SQLITE_ROW) { int row = sqlite3_column_int(statement, 0); char *rowData = (char *)sqlite3_column_text(statement, 1); NSString *fieldValue = [[NSString alloc] initWithUTF8String:rowData]; UITextField *field = self.lineFields[row]; field.text = fieldValue; } sqlite3_finalize(statement); } sqlite3_close(database); UIApplication *app = [UIApplication sharedApplication]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationWillResignActive:) name:UIApplicationWillResignActiveNotification object:app]; // Do any additional setup after loading the view from its nib. } -(NSString *)dataFilePath { NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentsDirectory = [paths objectAtIndex:0]; return [documentsDirectory stringByAppendingPathComponent:@"data.sqlite"]; } -(void)applicationWillResignActive:(NSNotification *)notification { sqlite3 *database; if (sqlite3_open([[self dataFilePath] UTF8String], &database) != SQLITE_OK) { sqlite3_close(database); NSAssert(0, @"Filed to open database"); } for (int i=0; i<4; i++) { UITextField *filed = self.lineFields[i]; char *upade = "INSERT OR REPLACE INTO FIELDS (ROW,FIELD_DATA)" "VALUES (?,?);"; char *errorMsg = NULL; sqlite3_stmt *stmt; if (sqlite3_prepare_v2(database, upade, -1, &stmt, nil) == SQLITE_OK) { sqlite3_bind_int(stmt, 1, i); sqlite3_bind_text(stmt, 2, [filed.text UTF8String], -1, NULL); } if (sqlite3_step(stmt) != SQLITE_DONE) { NSAssert(0, @"Error updating table:%s",errorMsg); sqlite3_finalize(stmt); } sqlite3_close(database); } } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } @end
2、BIDViewController.xib文件
注意:如下图
lineFields与XIB中的四个文本输入框链接
相关文章推荐
- 《精通iOS开发·第六版》数据持久化基础知识之CoreData持久化
- 《精通iOS开发·第六版》数据持久化基础知识之属性列表持久化
- iOS开发遇到的问题
- iOS应用性能调优的25个建议和技巧
- 《精通iOS开发·第六版》数据持久化基础知识之对象归档持久化
- iOS navigationController push的时候全屏显示下一个页面
- [ios]当前线程暂时休眠
- ios文件管理
- ios文件读取
- IOS 中的 AppDelegate.m/h
- iOS证书、签名详解
- iOS-label出现未知边框线的bug
- 适合新人学习的iOS官方Demo
- iOS开发者程序许可协议之简单介绍
- ios:画直线和虚线
- iOS开发学习路径的一些建议
- 中文 iOS/Mac 开发博客列表
- 将中文转为拼音 iOS
- IOS开发前的准备
- iOS实现textfield随键盘移动