FMDB数据库的简单实用

引入和FMDB第三方类库,
 demo地址:http://pan.baidu.com/s/1c0pbfxA


 1 #define dataBasePath [[(NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES)) lastObject]stringByAppendingPathComponent:dataBaseName]
2 #define dataBaseName @"MyDatabase.db"
3 #import "ViewController.h"
4 #import "FMDatabase.h"
5 #import "FMDatabaseAdditions.h"
6 #import "FMDatabaseQueue.h"
7
8
9 #import "MYDataBase.h"
10 @interface ViewController ()
11
12 @end
13
14 @implementation ViewController
15
16 - (void)viewDidLoad
17 {
18 [super viewDidLoad];
19 // Do any additional setup after loading the view, typically from a nib.
20 FMDatabase *db = [FMDatabase databaseWithPath:dataBasePath];
21 if (![db open]) {
22 NSLog(@"no");
23 return;
24 }NSLog(@"111");
25 //建立新表
26 [db executeUpdate:@"CREATE TABLE PersonList (Name text, Age integer, Sex integer, Phone text, Address text, Photo blob)"];
27
28 //插入一条数据
29 [db executeUpdate:@"INSERT INTO PersonList (Name, Age, Sex, Phone, Address, Photo) VALUES (?,?,?,?,?,?)",
30 @"Jone", [NSNumber numberWithInt:20], [NSNumber numberWithInt:0], @"091234567", @"Taiwan, R.O.C", nil];
31 //更新数据
32 [db executeUpdate:@"UPDATE PersonList SET Age = ? WHERE Name = ?",[NSNumber numberWithInt:30],@"John"];
33
34
35 //取数据
36 //返回数据库中第一条满足条件的结果
37 NSString *aa=[db stringForQuery:@"SELECT Name FROM User WHERE Name = ?",@"John"];
38
39 //fan返回满足条件的全部结果
40 // FMResultSet *rs = [db executeQuery:@"SELECT Name, Age FROM PersonList"];
41 //
42 FMResultSet *rs = [db executeQuery:@"SELECT * FROM PersonList"];
43
44 while ([rs next]) {
45
46 NSString *name = [rs stringForColumn:@"Name"];
47
48 int age = [rs intForColumn:@"Age"];
49 NSLog(@"name=%@,age = %d",name,age);
50
51 }
52
53 [rs close];
54
55
56
57 //快速读取一个row的一个数据
58 //找地址
59
60 NSString *address = [db stringForQuery:@"SELECT Address FROM PersonList WHERE Name = ?",@"John"];
61 NSLog(@"address=%@",address);
62 //找年齡
63
64 int age = [db intForQuery:@"SELECT Age FROM PersonList WHERE Name = ?",@"John"];
65
66 NSLog(@"age2 = %d",age);
67
68
69 //可以多个参数穿进去
70 NSDictionary *argsDict = [NSDictionary dictionaryWithObjectsAndKeys:@"donghongqiang", @"name",@"14",@"Age",@"dezhou",@"Address", nil];
71 [db executeUpdate:@"INSERT INTO PersonList (Name,Age,Address) VALUES (:name,:Age,:Address)" withParameterDictionary:argsDict];
72
73
74 NSString *address2 = [db stringForQuery:@"SELECT Address FROM PersonList WHERE Name = ?",@"donghongqiang"];
75 NSLog(@"address2=%@",address2);
76
77
78 }

对一些多线程操作的情况,要使用FMDatabaseQueue来操作,防止多线程对一个数据库操作发生错误


 1 -(void)FMDbatabasequeue
2
3 {
4
5
6
7 // 创建,最好放在一个单例的类中
8
9 FMDatabaseQueue *queue = [FMDatabaseQueuedatabaseQueueWithPath:dataBasePath];
10
11
12
13 // 使用
14
15 [queue inDatabase:^(FMDatabase *db) {
16
17 [db executeUpdate:@"INSERT INTO myTable VALUES (?)", [NSNumbernumberWithInt:1]];
18
19 [db executeUpdate:@"INSERT INTO myTable VALUES (?)", [NSNumbernumberWithInt:2]];
20
21 [db executeUpdate:@"INSERT INTO myTable VALUES (?)", [NSNumbernumberWithInt:3]];
22
23
24
25 FMResultSet *rs = [db executeQuery:@"select * from foo"];
26
27 while ([rs next]) {
28
29 // …
30
31 }
32
33 }];
34
35
36
37 // 如果要支持事务
38
39 [queue inTransaction:^(FMDatabase *db, BOOL *rollback) {
40
41 [db executeUpdate:@"INSERT INTO myTable VALUES (?)", [NSNumbernumberWithInt:1]];
42
43 [db executeUpdate:@"INSERT INTO myTable VALUES (?)", [NSNumbernumberWithInt:2]];
44
45 [db executeUpdate:@"INSERT INTO myTable VALUES (?)", [NSNumbernumberWithInt:3]];
46
47
48
49 // if (whoopsSomethingWrongHappened) {
50
51 // *rollback = YES;
52
53 // return;
54
55 // }
56
57 // etc…
58
59 [db executeUpdate:@"INSERT INTO myTable VALUES (?)", [NSNumbernumberWithInt:4]];
60
61 }];
62
63
64
65
66
67
68
69
70
71
72
73 [queue close];
74
75 }
76
77

可以封装成单例的类,来进行操作,


//  Created by apple on 14-4-28.
// Copyright (c) 2014年 apple. All rights reserved.
//
#define dataBasePath [[(NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES)) lastObject]stringByAppendingPathComponent:dataBaseName]
#define dataBaseName @"MyDatabase.db"

#import <Foundation/Foundation.h>
#import "FMDatabaseQueue.h"
#import "Pins.h"
#import "FMDatabaseAdditions.h"
#import "FMDatabase.h"
@interface MYDataBase : NSObject
{

}
@property(nonatomic,retain)FMDatabaseQueue *dbQueue;

+(MYDataBase*)sharedInstance;
-(Pins*)rsToPins:(FMResultSet*)rs;
- (void)addPins:(Pins*)pin;
- (NSArray *)getPins;
@end


//
// MYDataBase.m
// TextFMDB
//
// Created by apple on 14-4-28.
// Copyright (c) 2014年 apple. All rights reserved.
//

#import "MYDataBase.h"
static MYDataBase *mydatabase = nil;
@implementation MYDataBase

- (id)init
{

self = [super init];
if (self)
{
// self.dbFile = [DbFileManager dbFilePath];
self.dbQueue = [FMDatabaseQueue databaseQueueWithPath:dataBasePath];

}
return self;
}
+(MYDataBase*)sharedInstance{

@synchronized(self)
{
if (mydatabase == nil)
mydatabase = [[MYDataBase alloc] init];
}
return mydatabase;
}

//huoq获取pin
-(Pins*)rsToPins:(FMResultSet*)rs
{
Pins *pin = [[Pins alloc] init] ;
// user.ID = [rs intForColumn:@"_id"];
// user.name = [rs stringForColumn:@"name"];
// user.password = [rs stringForColumn:@"password"];
return pin;

}

- (void)addPins:(Pins*)pin
{
[self.dbQueue inTransaction:^(FMDatabase *db, BOOL *rollback) {
[db open];
// NSString *sql = @"insert into tbl_user(name, password) values (?, ?)";
// [db executeUpdate:sql,user.name, user.password];
[db close];
}];
}

- (NSArray *)getPins;
{
__block NSMutableArray *users = [[NSMutableArray alloc] init];
[self.dbQueue inDatabase:^(FMDatabase *db) {
[db open];
NSString *sql = @"select * from tbl_user ";
FMResultSet *rs = [db executeQuery:sql];
while ([rs next])
{
[users addObject:[self rsToPins :rs]];
}
[db close];
}];
return users;
}

@end

其中的pins类


#import <Foundation/Foundation.h>

@interface Pins : NSObject
{

}
@property(nonatomic,assign)int ID;
@property(nonatomic,retain)NSString *name;
@property(nonatomic,retain)NSString *address;
@property(nonatomic,retain)NSData *imagedata;

//+(Pins*)sharedInstance;

@end


#import "Pins.h"

@implementation Pins
@synthesize ID = _ID,name = _name,address = _address,imagedata = _imagedata;

@end

FMDB数据库的简单实用,码迷,mamicode.com

时间: 2024-10-08 00:06:37

FMDB数据库的简单实用的相关文章

ThinkPHP 数据库表结构处理类(简单实用)

<?php /*  * mysql表结构处理类  * 创建数据表,增加,编辑,删除表中字段  *  */ class MysqlManage{ /*  * 创建数据库,并且主键是aid  * table 要查询的表名  */ function createTable($table){ $sql="CREATE TABLE IF NOT EXISTS `$table` (`aid` INT NOT NULL primary key)ENGINE = InnoDB;"; M()-&g

FMDB的简单实用

首先到这裡下载FMDB的source code,接著在解开的档案裡,把src资料夹下除了fmdb.m的档案加入到自己的iOS专案,最后在专案中加入libsqlite3.dylib这个 函式库就可以了.啥?有人问為什麼不用加入fmdb.m?简单讲,这个档案是fmdb的使用说明.裡面的註解清楚,范例又简单,如果有兴趣,直接看 fmdb.m,大概就会用fmdb了. 以下介绍几个常用的指令,分享给大家: -打开/关闭资料库 使 用资料库的第一件事,就是建立一个资料库.要注意的是,在iOS环境下,只有do

简单实用的CSS网页布局中文排版技巧

由于汉字的特殊性,在css网页布局中,中文排版有别于英文排版.排版是一个麻烦的问题,小编认为,作为一个优秀的网页设计师和网页制作人员,掌握一些简单的中文排版技巧是不可或缺的,所以今天特意总结了几个简单实用的技巧,希望对大家有所帮助. 一.如何设定文字字体.颜色.大小等 font-style设定斜体,比如font-style:italic font-weight设定文字粗细,比如font-weight:bold font-size设定文字大小,比如font-size:12px line-heigh

开发一个简单实用的android紧急求助软件

之前女朋友一个人住,不怎么放心,想找一个紧急求助的软件,万一有什么突发情况,可以立即知道.用金山手机卫士的手机定位功能可以知道对方的位置状态,但不能主动发送求助信息,在网上了很多的APK,都是鸡肋功能,都需要解锁.并打开软件,真正的紧急情况可能没有时间来完成这一系列操作. 于是我自己做了一个这样的软件,在紧急情况下,连续按电源键5次即可发送求救短信和位置信息给事先指定的用户,这个操作在裤兜里就能完成.原理很简单,就是设置监听器捕获屏幕的开关,在较短的时间内屏幕开关达到一定次数后,触发手机定位,定

FMDB 数据库的使用

FMDB 数据库 和 SQLite3 非常相似  但要比 SQLite3 省好多代码  没有了各种绑定 直接引用 FMDB 的方法就可以简单解决 首先 FMDB 他还是一个单例类  因为要被其他类 使用 FMDB 还是由 打开数据库  创建数据名   添加数据   更新数据   删除数据  查询数据 几部分内容 在这里 model 的属性除了 image 外都是 NSString 类型  image 是 NSData 类型 所以在下面的查询处会有一个转换方式 打开数据库: 先 获取路径  在调用

Android 内容提供者(ContentProvider)的简单实用

Android 中的数据库是对应用私有的,自己是无法使用别的应用的数据库的.但是往往有需求要我们使用另外一个应用或者系统应用的数据,这时候就彰显了内容提供者,ContentPrivider的作用,他就是两个应用数据的桥梁,通过内容提供者和内容接受者我们可以在不同应用间传递数据. ContentPrivider也可以视为一种数据存储.它存储数据的方式和使用它的应用程序无关,重要的是应用如何以一致的编程接口,来访问存储其中的数据.内容提供者与数据库的使用差不多,也可以增删改查.而且数据可以存储于数据

iOS - FMDB数据库的使用

下面不废话了直接上代码??/* 首先把FMDB拖入到工程中,需要我们把sqlite3这个库导入工程,(若是非ARC的工程,我们可以直接导入就好) 数据库-->操作大量的有规律的数据 FMDB是别人在系统数据库的繁琐的基础上给又封装了一下,供我们使用,-->相比于系统数据库更简单,好用 FMDatabase 主要是提供操作时用得sql语句 FMDatabaseAdditions.h 只要是负责多线程或是查询时更新时的操作 FMDBResultSet 结果集,对数据库的操作,返回结果 */ //创

C# Ioc容器Unity,简单实用

原文:C# Ioc容器Unity,简单实用 开头先吐槽一下博客园超级不好用,添加图片后就写不动字了,难道是bug 好进入正题,先来说下依赖注入,简单来说就是定义好接口,上层代码调用接口,具体实现通过配置文件方式去指定具体实现类. 首先我们需要通过nuget来安装unity 安装好后就可以写一个方法类去实现依赖注入 public class UnityIocHelper : IServiceProvider { private readonly IUnityContainer _container

简单实用的PHP防注入类实例

这篇文章主要介绍了简单实用的PHP防注入类实例,以两个简单的防注入类为例介绍了PHP防注入的原理与技巧,对网站安全建设来说非常具有实用价值,需要的朋友可以参考下 本文实例讲述了简单实用的PHP防注入类.分享给大家供大家参考.具体如下: PHP防注入注意要过滤的信息基本是get,post,然后对于sql就是我们常用的查询,插入等等sql命令了,下面我给各位整理两个简单的例子,希望这些例子能给你网站带来安全. PHP防注入类代码如下: 复制代码 代码如下: <?php /**  * 参数处理类  *