美文网首页
关于FMDB简单的举例说明

关于FMDB简单的举例说明

作者: 春暖花已开 | 来源:发表于2017-10-22 13:44 被阅读9次
    小提示:查看数据库的图形化工具可以使用火狐浏览器的插件SQLite Manager
    主要类:

    FMDatabase : 一个单一的SQLite数据库,用于执行SQL语句。
    FMResultSet :执行查询一个FMDatabase结果集。
    FMDatabaseQueue :在多个线程来执行查询和更新时会使用这个类。

    1、获得数据库的路径

    /*
     1. 如果该路径下已经存在该数据库,直接获取该数据库;
     2. 如果不存在就创建一个新的数据库;
     3. 如果传@"",会在临时目录创建一个空的数据库,当数据库关闭时,数据库文件也被删除;
     4. 如果传nil,会在内存中临时创建一个空的数据库,当数据库关闭时,数据库文件也被删除;
    */
    + (FMDatabase *)databaseWithPath:(NSString *)filePath;
    
    // 获取数据库的路径
        NSString *dbPath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:@"student.sqlite"];
        // 获得数据库
        FMDatabase *db = [FMDatabase databaseWithPath:dbPath];
        self.db = db;
    

    2、执行更新语句

    /* 执行更新的SQL语句,字符串里面的"?",依次用后面的参数替代,必须是对象,不能是int等基本类型 */
    - (BOOL)executeUpdate:(NSString *)sql,... ;
    /* 执行更新的SQL语句,可以使用字符串的格式化进行构建SQL语句 */
    - (BOOL)executeUpdateWithFormat:(NSString*)format,... ;
    /* 执行更新的SQL语句,字符串中有"?",依次用arguments的元素替代 */
    - (BOOL)executeUpdate:(NSString*)sql withArgumentsInArray:(NSArray *)arguments;
    
    - (IBAction)createTable:(UIButton *)sender {
        
        // 创建表
        if ([_db open]) {
            BOOL result = [_db executeUpdate:@"create table if not exists t_student (id integer primary key autoincrement, name text not NULL, age integer not NULL);"];
            if (result) {
                NSLog(@"创建成功");
            }
            
            [_db close];
        }
    }
    
    - (IBAction)insertData:(UIButton *)sender {
        
        static int age = 15;
        if ([_db open]) {
            BOOL insertResult = [_db executeUpdateWithFormat:@"insert into t_student (name, age) values (%@, %d);", @"MJCheung", age];
            //或者
    //        BOOL insertResult = [_db executeUpdate:@"insert into t_student (name, age) values (?, ?);", @"MJCheung", @(age)];
            
            if (insertResult) {
                NSLog(@"插入数据成功%d", age);
                age++;
            } else {
                NSLog(@"插入数据失败");
            }
            
            [_db close];
        }
    }
    
    - (IBAction)deleteSelectedData:(id)sender {
        
        if ([_db open]) {
    //        BOOL deleteResult = [_db executeUpdate:@"delete from t_student where id = ?;", @1];
            // 或者
            BOOL deleteResult = [_db executeUpdateWithFormat:@"delete from t_student where name = %@;", @"MJCheung"];
            if (deleteResult) {
                NSLog(@"delete success");
            }
            
            [_db close];
        }
        
    }
    
    - (IBAction)clearAllData:(id)sender {
        
        if ([_db open]) {
            BOOL result = [_db executeUpdate:@"delete from t_student"];
            if (result) {
                NSLog(@"delete success");
            }
        }
    }
    

    3、执行查询语句

    常用select的相关方法
    /* 执行查询SQL语句,返回FMResultSet查询结果 */
    - (FMResultSet *)executeQuery:(NSString*)sql, ... ;
    - (FMResultSet *)executeQueryWithFormat:(NSString*)format, ... ;
    - (FMResultSet *)executeQuery:(NSString *)sql withArgumentsInArray:(NSArray *)arguments;
    
    处理结果FMResultSet的常用方法:
    /* 获取下一个记录 */
    - (BOOL)next;
    /* 获取记录有多少列 */
    - (int)columnCount;
    /* 通过列名得到列序号,通过列序号得到列名 */
    - (int)columnIndexForName:(NSString *)columnName;
    - (NSString *)columnNameForIndex:(int)columnIdx;
    /* 获取存储的整形值 */
    - (int)intForColumn:(NSString *)columnName;
    - (int)intForColumnIndex:(int)columnIdx;
    /* 获取存储的长整形值 */
    - (long)longForColumn:(NSString *)columnName;
    - (long)longForColumnIndex:(int)columnIdx;
    /* 获取存储的布尔值 */
    - (BOOL)boolForColumn:(NSString *)columnName;
    - (BOOL)boolForColumnIndex:(int)columnIdx;
    /* 获取存储的浮点值 */
    - (double)doubleForColumn:(NSString *)columnName;
    - (double)doubleForColumnIndex:(int)columnIdx;
    /* 获取存储的字符串 */
    - (NSString *)stringForColumn:(NSString *)columnName;
    - (NSString *)stringForColumnIndex:(int)columnIdx;
    /* 获取存储的日期数据 */
    - (NSDate *)dateForColumn:(NSString *)columnName;
    - (NSDate *)dateForColumnIndex:(int)columnIdx;
    /* 获取存储的二进制数据 */
    - (NSData *)dataForColumn:(NSString *)columnName;
    - (NSData *)dataForColumnIndex:(int)columnIdx;
    /* 获取存储的UTF8格式的C语言字符串 */
    - (const unsigned cahr *)UTF8StringForColumnName:(NSString *)columnName;
    - (const unsigned cahr *)UTF8StringForColumnIndex:(int)columnIdx;
    /* 获取存储的对象,只能是NSNumber、NSString、NSData、NSNull */
    - (id)objectForColumnName:(NSString *)columnName;
    - (id)objectForColumnIndex:(int)columnIdx;
    
    举例:
    - (IBAction)queryDataFromTable:(id)sender {
        
        if ([_db open]) {
            FMResultSet *res = [_db executeQuery:@"select * from t_student"];
            while ([res next]) {
                NSInteger ID = [res intForColumn:@"id"];
                NSString *name = [res stringForColumn:@"name"];
                NSInteger age = [res intForColumn:@"age"];
                NSLog(@"%ld-%@-%ld", ID, name, age);
            }
            [_db close];
        }
    }
    

    相关文章

      网友评论

          本文标题:关于FMDB简单的举例说明

          本文链接:https://www.haomeiwen.com/subject/hwvguxtx.html