FMDB的使用

//
//  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

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。