您的位置:首页 > 产品设计 > UI/UE

UI:数据库练习、滤镜效果

2015-10-05 08:51 344 查看
相机处理滤镜效果

滤镜主要使用在相机的美颜。

#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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: