IOS 数据库FMDB(四)- (增、删、改、查)


参考:http://wenku.baidu.com/link?url=TK90OOhfVLK_2N5ZalNS5-hB_a5_Bxb7WLCx5ryzfOxHkCw8mW7tMAe63s-lpP0gzh7sytZ8cYuWabYbjMLPlxkm9cbZiphxE1sVDHbgMBa

依赖库: libsqlte3.0


//
//  ViewController.m
//  FMDBDemo
// FMDB有三个主要的类
// FMDatabase一个FMDatabase对象就代表一个单独的SQLite数据库 用来执行SQL语句
// FMResultSet使用FMDatabase执行查询后的结果集
// FMDatabaseQueue用于在多线程中执行多个查询或更新,它是线程安全的
//  Created by Jason on 15-2-16.
//  Copyright (c) 2015年 eshore. All rights reserved.
//

static const char encodingChar[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";


#import "ViewController.h"

@interface ViewController (){

    NSString *__dataStr;
    NSData   *__imageData;
    NSArray  *__dataAry;
    NSString *__imageStr;

}

@end

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    
    
    __dataStr = @"字符串";
    __dataAry = @[@"1",@"2"];
    __imageData  = [[NSData alloc]initWithContentsOfURL:[NSURL URLWithString:@"http://d.hiphotos.baidu.com/zhidao/pic/item/962bd40735fae6cd0009f9410eb30f2442a70f54.jpg"]];
    NSLog(@"===%@",__imageData);
    
    //第一种操作
    [self firDbUse];
    
    //第二种操作
    [self serMyDbUse];
}




/**
 * 第一种获取队列读取数据库方法 多线程 可以获取id
 * 创表和插入在队列里:FMDatabaseQueue
 *
 */
-(void)firDbUse
{
    //Documents 路径
    NSString *documenPath = [NSSearchPathForDirectoriesInDomains(NSDocumentationDirectory, NSUserDomainMask, YES) objectAtIndex:0];
    //db路径
    NSString *dbPath = [documenPath stringByAppendingString:@"mydbFile.db"];
    
    
    //获取数据库实例
    FMDatabaseQueue *dbQueue = [FMDatabaseQueue databaseQueueWithPath:dbPath];
//    [_db executeUpdate:@"create table if not exists USER(id integer primary key autoincrement,name,score,image)"];
    //1.创建表 CREATE TABLE
    [dbQueue inDatabase:^(FMDatabase *db) {
        BOOL result=[db executeUpdate:@"CREATE TABLE IF NOT EXISTS t_person (id integer PRIMARY KEY AUTOINCREMENT, name text NOT NULL, age integer NOT NULL);"];
        if (result) {
            NSLog(@"创表成功");
        }else
        {
            NSLog(@"创表失败");
        }
    }];
    
    
    //2.插入数据 INSERT INTO
    [dbQueue inDatabase:^(FMDatabase *db) {
        [db executeUpdate:@"INSERT INTO t_person (name, age) VALUES (?, ?);",@"wendingding", @22];
        [db commit];
        
    }];
    
    //查询数据
    [dbQueue inDatabase:^(FMDatabase *db) {
        // 3.执行查询语句
        FMResultSet *resultSet = [db executeQuery:@"SELECT * FROM t_person"];
        
        // 4.遍历结果
        while ([resultSet next]) {
            int ID = [resultSet intForColumn:@"id"];
            NSString *name = [resultSet stringForColumn:@"name"];
            int age = [resultSet intForColumn:@"age"];
            NSLog(@"第一种:%d %@ %d", ID, name, age);
        }
    }];
    
    [dbQueue close];
    
}



/**
 * 第二种获取队列读取数据库方法
 *
 */
-(void)serMyDbUse
{
    //Documents 路径
    NSString *documenPath = [NSSearchPathForDirectoriesInDomains(NSDocumentationDirectory, NSUserDomainMask, YES) objectAtIndex:0];
    
    //db路径
    NSString *dbPath = [documenPath stringByAppendingString:@"serDBFile.db"];
    
    //获取数据库实例
    FMDatabase *db = [FMDatabase databaseWithPath:dbPath];
    
    //1.创建表 CREATE TABLE
    [db open];
//    [db executeUpdate:@"CREATE TABLE User1 (Name text,Age text)"];
    [db executeUpdate:@"CREATE TABLE MyDBb1 (Name text,Age)"];
    
    [db executeUpdate:@"create table if not exists User1(id integer primary key autoincrement,name,age,image)"];
    
    //2.插入数据 INSERT INTO
    [db executeUpdate:@"INSERT INTO User1 (name, age) VALUES (?, ?);",@"字符111", __dataStr];
    [db executeUpdate:@"INSERT INTO User1 (name, age) VALUES (?, ?);",@"字符222", @"字符串2222"];

    
    [db executeUpdate:@"INSERT INTO MyDBb1 (name, age) VALUES (?, ?);",@"图片", __imageData];

    
    //3.替换更新数据 将“Jason”更改为“李四”
    [db executeUpdate:@"UPDATE MyDBb SET Name = ? WHERE Name = ? ",@"李四",@"Jason"];
    
    
    //4.删除数据
//    [db executeUpdate:@"DELETE FROM User WHERE Name = ?",@"张三"];
    
    //5.查询数据
    //执行查询语句
    FMResultSet *resultSet = [db executeQuery:@"SELECT * FROM MyDBb1"];
    
    //遍历结果
    while ([resultSet next]) {
        int ID = [resultSet intForColumn:@"id"];
        NSString *name = [resultSet stringForColumn:@"name"];
        NSData *age = [resultSet dataForColumn:@"age"];
        NSLog(@"第二种1:%d %@ %@", ID, name, age);
        
        UIImageView *imageV = [[UIImageView alloc]initWithFrame:CGRectMake(100, 100, 150, 150)];
        imageV.image = [UIImage imageWithData:age];
        
        imageV.backgroundColor = [UIColor grayColor];
        
        [self.view addSubview:imageV];

    }
    
    FMResultSet *resultSet1 = [db executeQuery:@"SELECT * FROM User1"];
    
    //遍历结果
    while ([resultSet1 next]) {
        int ID = [resultSet1 intForColumn:@"id"];
        NSString *name = [resultSet1 stringForColumn:@"name"];
        NSString *age = [resultSet1 stringForColumn:@"age"];
        NSLog(@"第二种2:%d %@ %@", ID, name, age);
        
        
    }

    
}


@end


你可能感兴趣的:(IOS_高级开发)