UI:数据库练习、滤镜效果
2015-10-05 08:51
344 查看
相机处理滤镜效果
滤镜主要使用在相机的美颜。
View Code DataBaseHelper文件
数据库更新操作的时候,注意是对对象的更新,如果不是对象,就要转化为对象(因为底层是用C语言写的)。
添加联系人我们用的是 Block传值。
我们使用第三方数据库操作类 FMDB 的步骤:
#import "FMDatabase.h" 数据库操作类
#import "FMResultSet.h" 数据库查询类
#import "FMDatabaseAdditions.h" 数据库其他附加方法
#import "FMDatabaseQueue.h"线程下的数据库操作类
#import "FMDatabasePool.h"数据库在多线程下的操作类
使用 FMDB
FMDatabase :1.创建数据库,我们只需要提供一个数据库路径
2.创建表
3.用数据库对象去执行相应的操作 executeUpdate(只能操作对象) executeQure
操作有,创建表,增删改查
1).打开数据库
2).通过给定的SQL语句操作数据库
3).关闭数据库
一定要掌握下面的操作方法
*****************************************
*CocoaPods快速引入第三方类:
cd 拖入文件(cd 与文件名中间有空格)
pod init
pod search 需要引入的类
然后再podfile文件中粘贴上类的版本号
pod install --verbose --no-repo-update
*****************************************
注意:对于属性的属性在定义代理的属性的时候要使用 assign ;在使用Block 的时候要使用Copy
滤镜主要使用在相机的美颜。
#pragma mark (.h文件)-------------------------------------------------------------------------------------------------------- #import <Foundation/Foundation.h> #import <sqlite3.h> @class Contact; /** * 数据库的操作类 对数据库进行创建表,插入,删除,更新,查询操作,从数据库获取数据,处理数据 */ @interface DataBaseHelper : NSObject //单例方法 + (DataBaseHelper *)defaultDBHelper; + (void)createTableInDataBase;//创建表的操作 + (void)selectFromDataBase; //查询数据的操作 + (void)insertIntoDataBaseWithContact:(Contact *)contact; //插入一条数据的操作 + (void)updateFromDataBaseWithContact:(Contact *)contact; //更新一条数据的操作 + (void)deleteFromDataBaseWithContact:(Contact *)contact; //删除一条数据的操作 //获取唯一的标识 + (NSInteger)getNumber; //提供相应的方法给对应的controller @end //添加分类 用于创建指令集 @interface DataBaseHelper (CreateStatement) + (sqlite3_stmt *)createTableStatement; + (sqlite3_stmt *)insertStatement; + (sqlite3_stmt *)updateStatement; + (sqlite3_stmt *)selectStatement; + (sqlite3_stmt *)deleteStatement; /* 1.打开数据库 2.创建指令集 3.创建SQL语句 4.语法检查 */ @end #pragma mark (.m文件)-------------------------------------------------------------------------------------------------------- #import "DataBaseHelper.h" #import "DataBaseManager.h" #import "Contact.h" /** * 1.打开数据库 2.创建指令集 3.创建SQL语句 4.语法检查 5.获取指令集 (6.如果有参数,需要绑定参数) 7.执行SQL语句 8.释放资源 9.关闭数据库 */ @implementation DataBaseHelper //单例方法 static DataBaseHelper *helper = nil; + (DataBaseHelper *)defaultDBHelper { @synchronized(self) { if (!helper) { helper = [[DataBaseHelper alloc] init]; //程序每次运行,只从数据库里读取一次数据即可 [self createTableInDataBase];//创建表 [self selectFromDataBase];//读取数据 } } return helper; } //创建表的操作 + (void)createTableInDataBase { //5.获取指令集 sqlite3_stmt *stmt = [self createTableStatement]; //6.如果有参数,需要绑定参数 //7.执行SQL语句 执行数据库操作 if (sqlite3_step(stmt) == SQLITE_DONE) { NSLog(@"创建表成功"); } //8.释放资源 sqlite3_finalize(stmt); //9.关闭数据库 [DataBaseManager closeDataBase]; } + (void)selectFromDataBase { } //插入 + (void)insertIntoDataBaseWithContact:(Contact *)contact { //5.获取指令集 sqlite3_stmt *stmt = [self insertStatement]; //(6.如果有参数,需要绑定参数) //第一个:指令集; 第二个:第几个问号; 第三个:绑定的数据 sqlite3_bind_int(stmt, 1, (int)contact.con_id); //第一个:指令集; 第二个:第几个问号; 第三个:绑定的数据; 第四个:是否限制长度 第五个:预留参数 sqlite3_bind_text(stmt, 2, [contact.name UTF8String], -1, nil); sqlite3_bind_text(stmt, 3, [contact.gender UTF8String], -1, nil); sqlite3_bind_int(stmt, 4, (int)contact.age); sqlite3_bind_text(stmt, 5, [contact.phoneNum UTF8String], -1, nil); NSData *data = UIImagePNGRepresentation(contact.photoImage); //绑定二进制数据 sqlite3_bind_blob(stmt, 6, data.bytes, (int)data.length, nil); //7.执行SQL语句 if (sqlite3_step(stmt) == SQLITE_DONE) { NSLog(@"插入数据成功"); } //8.释放资源 sqlite3_finalize(stmt); //9.关闭数据库 [DataBaseManager closeDataBase]; } + (void)updateFromDataBaseWithContact:(Contact *)contact { //5.获取更新数据指令集 sqlite3_stmt *stmt = [self updateStatement]; //6.绑定参数 01:指令集 02:第几个问号 03:绑定的数据 //01 指令集 02第几个问号 03绑定的数据(C语言) 04是否限制长度 05预留参数 sqlite3_bind_text(stmt, 1, [contact.name UTF8String], -1, nil); sqlite3_bind_text(stmt, 2, [contact.gender UTF8String], -1, nil); sqlite3_bind_int(stmt, 3, (int)contact.age); sqlite3_bind_text(stmt, 4, [contact.phoneNum UTF8String], -1, nil); //绑定二进制数据 NSData *data = UIImagePNGRepresentation(contact.photoImage); sqlite3_bind_blob(stmt, 5, data.bytes, (int)data.length, nil); sqlite3_bind_int(stmt, 6, (int)contact.con_id); //7.执行SQL语句 if (sqlite3_step(stmt) == SQLITE_DONE) { NSLog(@"修改数据成功"); } //8.释放资源 sqlite3_finalize(stmt); //9.关闭数据库 [DataBaseManager closeDataBase]; } + (void)deleteFromDataBaseWithContact:(Contact *)contact { sqlite3_stmt *stmt = [self deleteStatement]; sqlite3_bind_int(stmt, 1, (int)contact.con_id); if (sqlite3_step(stmt) == SQLITE_DONE) { NSLog(@"删除数据成功"); } sqlite3_finalize(stmt); [DataBaseManager closeDataBase]; } //获取唯一的标识 //+ (NSInteger)getNumber { // //} @end //分类的实现部分 @implementation DataBaseHelper (CreateStatement) + (sqlite3_stmt *)createTableStatement { //1.打开数据库 sqlite3 *db = [DataBaseManager openDataBase]; //2.创建指令集 sqlite3_stmt *stmt = nil; //3.创建SQL语句 NSString *creatTable = @"create table if not exists Contact(con_id integer primary key autoincrement, con_name text, con_gender text, con_age integer, con_phoneNum text, con_image blob)"; //4.语法检查 检查数据库是否打开成功,检查SQL语句是否正确 /** * 第一个参数:数据库对象 第二个参数:SQL语句, 第三个参数:是否限制SQL语句的长度 第四个参数:指令集地址 第五个参数:预留参数 */ int flag = sqlite3_prepare_v2(db, [creatTable UTF8String], -1, &stmt, 0); if (flag == SQLITE_OK) { NSLog(@"创建表的指令集成功"); } return stmt;//返回指令集 } + (sqlite3_stmt *)insertStatement { //1.打开数据库 sqlite3 *db = [DataBaseManager openDataBase]; //2.创建指令集 sqlite3_stmt *stmt = nil; //3.创建SQL语句 NSString *insertSQL = @"insert into Contact(con_id, con_name, con_gender, con_age, con_phoneNum, con_image) values(?, ?, ?, ?, ?, ?)"; //4.语法检查 int flag = sqlite3_prepare_v2(db, [insertSQL UTF8String], -1, &stmt, 0); if (flag == SQLITE_OK) { NSLog(@"插入语法正确"); } return stmt; } + (sqlite3_stmt *)updateStatement { sqlite3 *db = [DataBaseManager openDataBase]; NSString *updateSQL = @"update Contact set con_name = ?, con_gender = ?, con_age = ?, con_phone = ?, con_image = ? where con_id = ?"; sqlite3_stmt *stmt = nil; int flag = sqlite3_prepare_v2(db, [updateSQL UTF8String], -1, &stmt, 0); if (SQLITE_OK == flag) { NSLog(@"更新数据成功"); } return stmt; } + (sqlite3_stmt *)selectStatement { sqlite3 *db = [DataBaseManager openDataBase]; NSString *selectSQL = @"select * from Contact"; sqlite3_stmt *stmt = nil; int flag = sqlite3_prepare_v2(db, [selectSQL UTF8String], -1, &stmt, 0); if (SQLITE_OK == flag) { NSLog(@"查询数据成功"); } return stmt; } + (sqlite3_stmt *)deleteStatement { sqlite3 *db = [DataBaseManager openDataBase]; NSString *deleteSQL = @"delete from Contact where con_id = ?"; sqlite3_stmt *stmt = nil; int flag = sqlite3_prepare_v2(db, [deleteSQL UTF8String], -1, &stmt, 0); if (SQLITE_OK == flag) { NSLog(@"删除数据成功"); } return stmt; } @end
View Code DataBaseHelper文件
数据库更新操作的时候,注意是对对象的更新,如果不是对象,就要转化为对象(因为底层是用C语言写的)。
添加联系人我们用的是 Block传值。
我们使用第三方数据库操作类 FMDB 的步骤:
#import "FMDatabase.h" 数据库操作类
#import "FMResultSet.h" 数据库查询类
#import "FMDatabaseAdditions.h" 数据库其他附加方法
#import "FMDatabaseQueue.h"线程下的数据库操作类
#import "FMDatabasePool.h"数据库在多线程下的操作类
使用 FMDB
FMDatabase :1.创建数据库,我们只需要提供一个数据库路径
2.创建表
3.用数据库对象去执行相应的操作 executeUpdate(只能操作对象) executeQure
操作有,创建表,增删改查
1).打开数据库
2).通过给定的SQL语句操作数据库
3).关闭数据库
一定要掌握下面的操作方法
*****************************************
*CocoaPods快速引入第三方类:
cd 拖入文件(cd 与文件名中间有空格)
pod init
pod search 需要引入的类
然后再podfile文件中粘贴上类的版本号
pod install --verbose --no-repo-update
*****************************************
注意:对于属性的属性在定义代理的属性的时候要使用 assign ;在使用Block 的时候要使用Copy
相关文章推荐
- Leetcode NO.232 Implement Queue using Stacks
- UI11_UITableViewController
- UI11_TableView编辑
- 【白痴弟弟和你加强应用层】阅读 Develop API Guides 思考(一个)
- UI11_数据处理
- UI_UITableViewCell自适应高度(图片,字体)
- UI10_省市区分区跳转版
- SpriteBuilder中时间线播放音效的弊端
- SpriteBuilder中时间线播放音效的弊端
- SpriteBuilder中时间线播放音效的弊端
- UITableView中的一些坑
- SpriteBuilder中音频波长超过Timeline结尾的情况
- SpriteBuilder中音频波长超过Timeline结尾的情况
- SpriteBuilder中音频波长超过Timeline结尾的情况
- 2015/10/4 iOS 笔记 细节 简单-代理过程 UITableView
- HDOJ 题目5496 Beauty of Sequence(数学)
- iOS UISwitch用法和示例
- hdu 5496 Beauty of Sequence bc#58 组合 离散化
- Android后台进程与UI进程的交互
- Fluent NHibernate关系映射