文档章节

FMDB的使用

小鸡蹲蘑菇
 小鸡蹲蘑菇
发布于 2015/05/26 20:11
字数 473
阅读 108
收藏 2
//
//  ViewController.m
//  SQLLITE
//
//  Created by wup on 15/5/26.
//  Copyright (c) 2015年 apple. All rights reserved.
//
#import "ViewController.h"
#import <sqlite3.h>
#import "shop.h"
#import "FMDB.h"
@interface ViewController () <UITableViewDataSource,UISearchBarDelegate>
@property (nonatomic,strong)   NSMutableArray *shops;
@property (nonatomic,strong) UITableView *tbv ;
@property (nonatomic,strong)  FMDatabase *fmdb;
@end
@implementation ViewController
-(NSMutableArray *)shops
{
    if (!_shops)
    {
         _shops =[NSMutableArray array];//初始化数组
    }
    return _shops;
}
- (void)viewDidLoad {
    [super viewDidLoad];
    _tbv = [[UITableView alloc] initWithFrame:self.view.bounds];
    [self.view addSubview:_tbv];
    _tbv.dataSource = self;
    _tbv.separatorStyle = UITableViewCellSeparatorStyleNone;//去除tableview上面的横线
    self.tbv.contentInset = UIEdgeInsetsMake(64, 0, 0 , 0 );
    UISearchBar *uscb = [[UISearchBar alloc] initWithFrame:CGRectMake(0, 20, 320, 44)];
    [self.view addSubview:uscb];
    uscb.delegate = self;
    NSString *filename = [NSSearchPathForDirectoriesInDomains(NSDocumentationDirectory
                                                              , NSUserDomainMask, YES).lastObject stringByAppendingString:@"wup4.sqllite"] ;
    
    _fmdb = [[FMDatabase alloc] initWithPath:filename];//初始化sqlite
    [_fmdb open];//打开数据库
//   建表
    [_fmdb executeUpdate:@"CREATE TABLE IF NOT EXISTS t_shop (id integer PRIMARY KEY, name text NOT NULL, price real);"];
    /**
     *  数据表插入数据方法
     */
     for (int i = 0 ;i < 100 ; i ++)
     {
         NSString *str = [NSString stringWithFormat:@"手机%d",i];
         [_fmdb executeUpdateWithFormat:@"INSERT INTO t_shop(name, price) VALUES (%@, %u);",str,arc4random() % 1000];
     }
    /**
     *  数据表检索,while循环每次获取到下一行数据时将数据转换成模型并添加到数组中。
     *  fmres.next返回的事bool类型,获取到为真,检索完成即为假。
     */
    FMResultSet *fmres  = [_fmdb executeQuery:@"SELECT name,price FROM t_shop;"];//数据库查询命令
    while (fmres.next) {
        shop *testshop = [[shop alloc] init];
        testshop.name  =  [fmres stringForColumn:@"name"];
        testshop.price =  [fmres stringForColumn:@"price"];
        
   
        [self.shops addObject:testshop];
        
    }
    NSLog(@"%d",_shops.count);
    NSLog(@"Retain count is %ld", CFGetRetainCount((__bridge CFTypeRef)_shops));//ARC下打印retain count
//    [_fmdb executeUpdate:@"DELETE FROM t_shop;"];
   
};
#pragma mark - searchbar 的代理方法
-(void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText
{
    NSString *sql  = [NSString stringWithFormat:@"SELECT name,price FROM t_shop WHERE name LIKE '%%%@%%' OR price LIKE '%%%@%%';",searchText,searchText];
    
    FMResultSet *fmres  = [self.fmdb executeQuery:sql];//数据库查询命令
    
    NSLog(@"%d",_shops.count);
    NSLog(@"Retain count is %ld", CFGetRetainCount((__bridge CFTypeRef)_shops));//ARC下打印retain count
    self.shops = nil;
    while (fmres.next) {
        shop *testshop = [[shop alloc] init];
        testshop.name  =  [fmres stringForColumn:@"name"];
        testshop.price =  [fmres stringForColumn:@"price"];
        
        
        [self.shops addObject:testshop];
        
    }
    
    NSLog(@"Retain count is %ld", CFGetRetainCount((__bridge CFTypeRef)_shops));//ARC下打印retain count
    [self.tbv reloadData];
}
#pragma mark - tableview 的代理方法
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return self.shops.count;
    
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *ID = @"cell";
    
     UITableViewCell *cell  = [tableView dequeueReusableCellWithIdentifier:ID];
    if (cell == nil) {
         cell  = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:ID];
    }
    
    shop *test2shop = self.shops[indexPath.row];
    cell.textLabel.text = test2shop.name;
    cell.detailTextLabel.text   = test2shop.price;
    
    
    
    return cell;
}
@end

© 著作权归作者所有

上一篇: IOS 本地通知
下一篇: Print Star
小鸡蹲蘑菇
粉丝 5
博文 68
码字总数 24144
作品 0
海淀
私信 提问
FMDB | 实现数据的增删改查

一:介绍 FMDB是一个轻量级的数据库,用于将网络资源存储在本地。 项目中使用 ARC 还是 MRC,对使用 FMDB 都没有任何影响,FMDB 会在编译项目时自动匹配。 FMDB 将 SQLite API 进行了很友好的...

展菲
2018/11/30
0
0
转自:http://blog.devtang.com/blog/2012/04/22/use-fmd

1234567891011 可以看到,使用FMDB后的数据库代码清晰明了,比原生的API优雅多了。另外,FMDB同时兼容ARC和非ARC工程,会自动根据工程配置来调整相关的内存管理代码。 使用说明 该使用说明主...

W浪琴B
2016/05/25
17
0
数据库操作(FMDB)

iOS中原生的SQLite API在使用上相当不友好,在使用时,非常不便。于是,就出现了一系列将SQLite API进行封装的库,例如FMDB、PlausibleDatabase、sqlitepersistentobjects等,FMDB (https:/...

Snaiper
2016/01/28
116
0
iOS开发数据库篇—FMDB简单介绍

iOS开发数据库篇—FMDB简单介绍 一、简单说明 1.什么是FMDB FMDB是iOS平台的SQLite数据库框架 FMDB以OC的方式封装了SQLite的C语言API 2.FMDB的优点 使用起来更加面向对象,省去了很多麻烦、冗...

托楚齐坎基基
2015/12/30
211
0
iOS开发之FMDB入门学习心得(Swift版)

iOS开发之FMDB入门学习心得(Swift版) 一些废话 最近学习了一下iOS的第三方封装的sqlite数据库fmdb,于是把学习的心得进行了整理。内容只是涉及一些简单的操作:增,删,改,查。 与其说是一...

法斗斗
2016/08/10
156
0

没有更多内容

加载失败,请刷新页面

加载更多

Mybatis 源码(二)Mybatis 初始化

Mybatis 初始化是由SqlSessionFactoryBuilder来完成的,主要的工作解析XML文件,并将解析的类容封装到Configuration类中,最后将Configuration类封装到SqlSessionFactory中并返回,自此初始化...

xiaolyuh
26分钟前
9
0
约瑟夫环问题

约瑟夫环问题的原来描述为,设有编号为1,2,……,n的n(n>0)个人围成一个圈,从第1个人开始报数,报到m时停止报数,报m的人出圈,再从他的下一个人起重新报数,报到m时停止报数,报m的出圈,...

mskk
35分钟前
5
0
JEP解读与尝鲜系列1 - Java Valhalla与Java Inline class

涉及到的JEP: Project Valhalla JEP 169: Value Objects JEP 218: Generics over Primitive Types 这些特性将在JDK14实现 Valhalla项目背景 最主要的一点就是,让Java适应现代硬件:在Java语...

zhxhash
37分钟前
10
0
总结:Redis集群

一、redis集群方案 Master-slave方式,Master和Slave的数据一致,Slave从Master同步数据,然后通过Sentinal(哨兵)监控Master和Slave的健康状态,当异常的时候迅速切换,如Master宕机的时候...

浮躁的码农
40分钟前
7
0
三个盘子的汉诺塔

package base;/** * 汉诺塔 */public class TowerApp { static int nDisks = 3; public static void main(String[] args) { doTowers(nDisks, 'A','B',......

clean123
42分钟前
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部