ios数据库FMDB

时间:2023-03-08 16:15:32

一、下载fmdb类库

二、添加libsqulite3.0.dylib

三、添加头文件#import "FMDB.h"

四、打开数据库

a、设置路径NSString *path = [[NSSearchPathForDirectoriesInDomainas(NSDocumentDirectory, NSUserDomainMask, YES) lastObject]  stringByAppendingPathComponent:@"shops.sqlite"];

b、设置强引用属性 @property (nonatomic, strong) FMDatabase *db;

c、self.db =  [FMDatabase databaseWithPath:path];//返回一个数据库对象

d、打开 [self.db open];

//两个重要语句

//executeQuery:查询数据

//executeUpdate:除查询数据以外的其他操作

五、创表

[self.db execureUpdate:@"CREATE TABLE IF NOT EXISTS t_shop (if integer PRIMARY KEY, name text NOT NULL, price real);"];

六、插入数据

NSString *name = [NSString stringWithFormat:@"手机-%d",i];

[self.db executeUpdateWithFormat:@"INSERT INTO t_shop(name, price) VALUES (%@, %d);",name,arc4random()%1000];

七、读取数据

a、得到结果集

FMResultSet *set = [self.db executeQuery:@"SELECT * FROM t_shop;"];

b、不断取出数据

while(set.next){

//获得当前所指向的数据

NSString *name = [set stringForColumn:@"name"];

double price =[set doubleForColumn:@"price"];

NSLog(@"%@  %f",name , price);

}

八、删除数据

[self.db executeUpdate:@"DELETE FROM t_SHOP WHERE price < 500;"];

九、封装数据库

a、不让控制器接触数据库,设置一个工具类ShopTool

b、设置数据模型Shop

c、在ShopTool中,将db设置成全局变量

static FMDatabase *_db;

b、初始化 +(void)initalize

.......

封装的ShopTool代码:

#import <Foundation/Foundation.h>
@class HMShop; @interface HMShopTool : NSObject
+ (NSArray *)shops;
+ (void)addShop:(HMShop *)shop;
@end #import "HMShopTool.h"
#import "FMDB.h"
#import "HMShop.h" @implementation HMShopTool static FMDatabase *_db; + (void)initialize
{
// 1.打开数据库
NSString *path = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:@"shops.sqlite"];
_db = [FMDatabase databaseWithPath:path];
[_db open]; // 2.创表
[_db executeUpdate:@"CREATE TABLE IF NOT EXISTS t_shop (id integer PRIMARY KEY, name text NOT NULL, price real);"];
} + (void)addShop:(HMShop *)shop
{
[_db executeUpdateWithFormat:@"INSERT INTO t_shop(name, price) VALUES (%@, %f);", shop.name, shop.price];
} + (NSArray *)shops
{// 得到结果集
FMResultSet *set = [_db executeQuery:@"SELECT * FROM t_shop;"]; // 不断往下取数据
NSMutableArray *shops = [NSMutableArray array];
while (set.next) {
// 获得当前所指向的数据
HMShop *shop = [[HMShop alloc] init];
shop.name = [set stringForColumn:@"name"];
shop.price = [set doubleForColumn:@"price"];
[shops addObject:shop];
}
return shops;
}
@end

控制器代码:

#import "HMViewController.h"
//#import "FMDB.h"
#import "HMShop.h"
#import "HMShopTool.h" @interface HMViewController ()
//@property (nonatomic, strong) FMDatabase *db;
@end @implementation HMViewController - (void)viewDidLoad
{
[super viewDidLoad]; // 1.打开数据库
// NSString *path = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:@"shops.sqlite"];
// self.db = [FMDatabase databaseWithPath:path];
// [self.db open];
//
// // 2.创表
// [self.db executeUpdate:@"CREATE TABLE IF NOT EXISTS t_shop (id integer PRIMARY KEY, name text NOT NULL, price real);"];
// executeQuery:查询数据
// [self.db executeQuery:<#(NSString *), ...#>]; // executeUpdate:除查询数据以外的其他操作
// [self.db executeUpdate:<#(NSString *), ...#>];
} - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
// for (int i = 0; i<100; i++) {
// HMShop *shop = [[HMShop alloc] init];
// shop.name = [NSString stringWithFormat:@"枕头--%d", i];
// shop.price = arc4random() % 200;
// [HMShopTool addShop:shop];
// } NSArray *shops = [HMShopTool shops];
for (HMShop *shop in shops) {
NSLog(@"%@ %f", shop.name, shop.price);
} // [self.db executeUpdate:@"DELETE FROM t_shop WHERE price < 800;"];
//
// [self query];
}

shop.h模型代码:

#import <Foundation/Foundation.h>

@interface HMShop : NSObject
@property (nonatomic, copy) NSString *name;
@property (nonatomic, assign) double price;
@end