iOS数据库的使用方法(FMDB)
2015-11-04 14:45
281 查看
一、下面简单的介绍一下FMDB的相关信息:
1.FMDB是iOS平台SQLite数据库框架,以OC的方式封装了SQLite的C语言的API
2.在诸多的数据库框架中,为什么FMDB能够如此的受开发者喜爱呢?
主要是因为它使用起来更加面向对象,省去了很多的麻烦、冗余的代码;
比ios自带的Core Data框架更加的轻量级和灵活;
并且提供了或线程安装的数据库操作方法,有效地防止数据混乱。
3.FMDB的下载,到giihub上搜索下载
https://github.com
二、FMDB的三个主要类
1.FMDatabase
一个FMDatabase对象就是一个Sqlite数据库,用来执行SQL语言
2.FMResultSet
使用FMDatabase执行sql操作后的查询结果集
3.FMDatabaseQueue
用于多线程中执行多个查询或更新等操作
三、FMDB的具体使用方法
1.打开数据库
FMDatabase *db = [FMDatabase databaseWithPath:dbPath];
if (![db
open]) {
DDLogError(@"Could not open db.");
}else{
[db
setUserVersion:1];//设置数据库的版本号,方便后期的数据库升级
}
2.执行更新----在FMDB中,除了查询之外所有的操作都称为“更新”
使用executeUpdate:方法执行更新
- (BOOL)executeUpdate:(NSString*)sql, ...
- (BOOL)executeUpdateWithFormat:(NSString*)format, ...
- (BOOL)executeUpdate:(NSString*)sql withArgumentsInArray:(NSArray *)arguments
- (BOOL)executeUpdate:(NSString*)sql withParameterDictionary:(NSDictionary *)arguments
示例:create创建新的表
包装一个更新的方法
- (BOOL)executeUpdate:(NSString*)sql {
BOOL result = NO;
@try {
result = [self.db executeUpdate:sql];
}
@catch (NSException *exception) {
result = NO;
DDLogError(@"error:%@", exception);
}
@finally {
return result;
}
}
插入,修改保存
3.执行查询
- (FMResultSet *)executeQuery:(NSString*)sql, ...
- (FMResultSet *)executeQueryWithFormat:(NSString*)format, ...
- (FMResultSet *)executeQuery:(NSString *)sql withArgumentsInArray:(NSArray *)arguments
示例
// 查询数据
FMResultSet *rs = [db executeQuery:@"SELECT * FROM t_student"];
// 遍历结果集
while ([rs next]) {
NSString *name = [rs stringForColumn:@"name"];
int age = [rs intForColumn:@"age"];
double score = [rs doubleForColumn:@"score"];
}
四、示例代码
#import "DBViewController.h"
#import "FMDB.h"
@interface DBViewController ()
@property(nonatomic,strong)FMDatabase *db;
@end
@implementation DBViewController
- (void)viewDidLoad
{
[super viewDidLoad];
//1.获得数据库文件的路径
NSString *doc=[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
NSString *fileName=[doc stringByAppendingPathComponent:@"20151104.db"];
//2.获得数据库
FMDatabase *db=[FMDatabase databaseWithPath:fileName];
//3.打开数据库
if ([db open]) {
//4.创表
BOOL result=[db executeUpdate:@"CREATE TABLE IF NOT EXISTS t_student (id integer PRIMARY KEY AUTOINCREMENT, name text NOT NULL, age integer NOT NULL);"];
if (result) {
NSLog(@"创表成功");
}else
{
NSLog(@"创表失败");
}
}
self.db=db;
}
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
[self delete];
[self insert];
[self query];
}
//插入数据
-(void)insert
{
for (int i = 0; i<10; i++) {
NSString *name = [NSString stringWithFormat:@"jack-%d", arc4random_uniform(100)];
[self.db executeUpdate:@"INSERT INTO t_student (name, age) VALUES (?, ?);", name, @(arc4random_uniform(40))];
// [self.db executeUpdate:@"INSERT INTO t_student (name, age) VALUES (?, ?);" withArgumentsInArray:@[name, @(arc4random_uniform(40))]];
// executeUpdateWithFormat : 不确定的参数用%@、%d等来占位
// [self.db executeUpdateWithFormat:@"INSERT INTO t_student (name, age) VALUES (%@, %d);", name, arc4random_uniform(40)];
}
}
//删除数据
-(void)delete
{
[self.db executeUpdate:@"DROP TABLE IF EXISTS t_student;"];
[self.db executeUpdate:@"CREATE TABLE IF NOT EXISTS t_student (id integer PRIMARY KEY AUTOINCREMENT, name text NOT NULL, age integer NOT NULL);"];
}
//查询
- (void)query
{
// 1.执行查询语句
FMResultSet *resultSet = [self.db executeQuery:@"SELECT * FROM t_student"];
// 2.遍历结果
while ([resultSet next]) {
int ID = [resultSet intForColumn:@"id"];
NSString *name = [resultSet stringForColumn:@"name"];
int age = [resultSet intForColumn:@"age"];
NSLog(@"%d %@ %d", ID, name, age);
}
}
@end
1.FMDB是iOS平台SQLite数据库框架,以OC的方式封装了SQLite的C语言的API
2.在诸多的数据库框架中,为什么FMDB能够如此的受开发者喜爱呢?
主要是因为它使用起来更加面向对象,省去了很多的麻烦、冗余的代码;
比ios自带的Core Data框架更加的轻量级和灵活;
并且提供了或线程安装的数据库操作方法,有效地防止数据混乱。
3.FMDB的下载,到giihub上搜索下载
https://github.com
二、FMDB的三个主要类
1.FMDatabase
一个FMDatabase对象就是一个Sqlite数据库,用来执行SQL语言
2.FMResultSet
使用FMDatabase执行sql操作后的查询结果集
3.FMDatabaseQueue
用于多线程中执行多个查询或更新等操作
三、FMDB的具体使用方法
1.打开数据库
FMDatabase *db = [FMDatabase databaseWithPath:dbPath];
if (![db
open]) {
DDLogError(@"Could not open db.");
}else{
[db
setUserVersion:1];//设置数据库的版本号,方便后期的数据库升级
}
2.执行更新----在FMDB中,除了查询之外所有的操作都称为“更新”
使用executeUpdate:方法执行更新
- (BOOL)executeUpdate:(NSString*)sql, ...
- (BOOL)executeUpdateWithFormat:(NSString*)format, ...
- (BOOL)executeUpdate:(NSString*)sql withArgumentsInArray:(NSArray *)arguments
- (BOOL)executeUpdate:(NSString*)sql withParameterDictionary:(NSDictionary *)arguments
示例:create创建新的表
包装一个更新的方法
- (BOOL)executeUpdate:(NSString*)sql {
BOOL result = NO;
@try {
result = [self.db executeUpdate:sql];
}
@catch (NSException *exception) {
result = NO;
DDLogError(@"error:%@", exception);
}
@finally {
return result;
}
}
- (BOOL)initTable { BOOL isSuccess = YES; [self.db beginTransaction]; <pre name="code" class="objc"> isSuccess = [self executeUpdate:@"CREATE TABLE IF NOT EXISTS banner ( banner_id INTEGER PRIMARY KEY AUTOINCREMENT, sequence INTEGER, photo_addr TEXT, photo_title TEXT, hyperlink TEXT );"];<span style="font-family: Arial, Helvetica, sans-serif;"> </span>if (isSuccess) { [self.db commit]; }else { [self.db rollback]; } return isSuccess;}
插入,修改保存
<p class="p1"><span class="s1">sql = [</span><span class="s2">NSString</span><span class="s1"> </span><span class="s3">stringWithFormat</span><span class="s1">:</span><span class="s4">@"insert or replace into %@ (%@) values (%@) "</span><span class="s1">,tableName,keyString,valueString];</span></p><p class="p1"><span class="s1" style="font-family: Arial, Helvetica, sans-serif;">[</span><span class="s2" style="font-family: Arial, Helvetica, sans-serif;">self</span><span class="s1" style="font-family: Arial, Helvetica, sans-serif;">.</span><span class="s3" style="font-family: Arial, Helvetica, sans-serif;">db</span><span class="s1" style="font-family: Arial, Helvetica, sans-serif;"> </span><span class="s4" style="font-family: Arial, Helvetica, sans-serif;">executeUpdate</span><span class="s1" style="font-family: Arial, Helvetica, sans-serif;">:sql </span><span class="s4" style="font-family: Arial, Helvetica, sans-serif;">withParameterDictionary</span><span class="s1" style="font-family: Arial, Helvetica, sans-serif;">:dict];</span></p><p class="p1"><span class="s1" style="font-family: Arial, Helvetica, sans-serif;"><span class="s1" style="white-space: pre; background-color: rgb(240, 240, 240);">或者[</span><span class="s2" style="white-space: pre; background-color: rgb(240, 240, 240);">self</span><span class="s1" style="white-space: pre; background-color: rgb(240, 240, 240);">.</span><span class="s3" style="white-space: pre; background-color: rgb(240, 240, 240);">db</span><span class="s1" style="white-space: pre; background-color: rgb(240, 240, 240);"> </span><span class="s4" style="white-space: pre; background-color: rgb(240, 240, 240);">executeUpdate</span><span class="s1" style="white-space: pre; background-color: rgb(240, 240, 240);">:sql withArgumentsInArray:array</span><span class="s1" style="white-space: pre; background-color: rgb(240, 240, 240);">];</span> </span></p><p class="p1"><span class="s1" style="font-family: Arial, Helvetica, sans-serif;">delete from table//删除表格</span></p>
3.执行查询
- (FMResultSet *)executeQuery:(NSString*)sql, ...
- (FMResultSet *)executeQueryWithFormat:(NSString*)format, ...
- (FMResultSet *)executeQuery:(NSString *)sql withArgumentsInArray:(NSArray *)arguments
示例
// 查询数据
FMResultSet *rs = [db executeQuery:@"SELECT * FROM t_student"];
// 遍历结果集
while ([rs next]) {
NSString *name = [rs stringForColumn:@"name"];
int age = [rs intForColumn:@"age"];
double score = [rs doubleForColumn:@"score"];
}
四、示例代码
#import "DBViewController.h"
#import "FMDB.h"
@interface DBViewController ()
@property(nonatomic,strong)FMDatabase *db;
@end
@implementation DBViewController
- (void)viewDidLoad
{
[super viewDidLoad];
//1.获得数据库文件的路径
NSString *doc=[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
NSString *fileName=[doc stringByAppendingPathComponent:@"20151104.db"];
//2.获得数据库
FMDatabase *db=[FMDatabase databaseWithPath:fileName];
//3.打开数据库
if ([db open]) {
//4.创表
BOOL result=[db executeUpdate:@"CREATE TABLE IF NOT EXISTS t_student (id integer PRIMARY KEY AUTOINCREMENT, name text NOT NULL, age integer NOT NULL);"];
if (result) {
NSLog(@"创表成功");
}else
{
NSLog(@"创表失败");
}
}
self.db=db;
}
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
[self delete];
[self insert];
[self query];
}
//插入数据
-(void)insert
{
for (int i = 0; i<10; i++) {
NSString *name = [NSString stringWithFormat:@"jack-%d", arc4random_uniform(100)];
[self.db executeUpdate:@"INSERT INTO t_student (name, age) VALUES (?, ?);", name, @(arc4random_uniform(40))];
// [self.db executeUpdate:@"INSERT INTO t_student (name, age) VALUES (?, ?);" withArgumentsInArray:@[name, @(arc4random_uniform(40))]];
// executeUpdateWithFormat : 不确定的参数用%@、%d等来占位
// [self.db executeUpdateWithFormat:@"INSERT INTO t_student (name, age) VALUES (%@, %d);", name, arc4random_uniform(40)];
}
}
//删除数据
-(void)delete
{
[self.db executeUpdate:@"DROP TABLE IF EXISTS t_student;"];
[self.db executeUpdate:@"CREATE TABLE IF NOT EXISTS t_student (id integer PRIMARY KEY AUTOINCREMENT, name text NOT NULL, age integer NOT NULL);"];
}
//查询
- (void)query
{
// 1.执行查询语句
FMResultSet *resultSet = [self.db executeQuery:@"SELECT * FROM t_student"];
// 2.遍历结果
while ([resultSet next]) {
int ID = [resultSet intForColumn:@"id"];
NSString *name = [resultSet stringForColumn:@"name"];
int age = [resultSet intForColumn:@"age"];
NSLog(@"%d %@ %d", ID, name, age);
}
}
@end
相关文章推荐
- Android之获取手机上的图片和视频缩略图thumbnails
- 数据库链接字符串查询网站
- DB2实例管理
- DB2实例管理
- 保障MySQL数据安全的14个最佳方法
- mysql问答汇集
- 创建一个空的IBM DB2 ECO数据库的方法
- Access 2000 数据库 80 万记录通用快速分页类
- 开通一个数据库失败的原因的和解决办法
- 一个简单的asp数据库操作类
- CentOS下DB2数据库安装过程详解
- EasyASP v1.5发布(包含数据库操作类,原clsDbCtrl.asp)第1/2页
- sql2008 还原数据库解决方案
- Oracle 数据库自动存储管理-安装配置
- Oracle 数据库 临时数据的处理方法
- 数据库分页查询语句数据库查询
- 最近比较流行的数据库挂马
- Oracle 手动创建数据库步骤详解
- 分割超大Redis数据库例子