ios(六)sqlite3以及FMDB

本文介绍了SQLite数据库在iOS开发中的应用,强调其轻量级和跨平台特性。通过创建personinfo.sqlite数据库并创建person表,阐述了SQLite中使用sqlite3_open、sqlite3_prepare_v2和sqlite3_step等方法进行数据操作的过程。此外,文章还讨论了FMDB这一SQLite封装库,指出其在执行有数据返回的语句时的便利性,并展示了FMDB的数据库增删改操作。
摘要由CSDN通过智能技术生成

SQLite:一种轻量的本地数据库,方便嵌入系统,支持跨平台,根据工作经验来看,无论是Android还是iOS大多都采用SQLite

首先我们需要新建一个数据库,我们给他起名personinfo.sqlite,创建一张叫做person的表,里面有三个字段 name,age,sex数据库存放在iOS的沙盒文件Document目录下,

#define DBName @"personinfo.sqlite"
#define table @"PERSONINFO"
#define Name  @"Name"
#define Age   @"Age"
#define Sex   @"Sex"

//自己命名数据库,返回该数据库地址
-(NSString *)DB_path{
    NSArray *paths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documents=[paths objectAtIndex:0];
    return [documents stringByAppendingPathComponent:DBName];
    //return database_path;
}
stringByAppendingPathComponent方法:如果文件已经存在,就返回该文件地址,如果没有则新建文件

新建好数据库后,所有数据库的操作,都得先打开数据库,SQLite中使用sqlite3_open方法

//    创建数据库文件,并返回数据库目录
    NSString *DB_path=[self DB_path];
//    打开数据库
    if (sqlite3_open([DB_path UTF8String], &db)!=SQLITE_OK) {
        //open fail
        sqlite3_close(db);
        NSLog(@"open fail");
    }

执行无返回数据的sql语句比较方便,只要使用sqlite3_exec即可

//传入sql    执行sql语句,例如insert,delete,
-(void)execute_sql:(NSString *)sql{
    char *err;
    if (sqlite3_exec(db,[sql UTF8String], NULL, NULL, &err)!=SQLITE_OK) {
        sqlite3_close(db);
        NSLog(@"数据库操作失败");
    }else{
        NSLog(@"SUCCESS");
    }
}

但是sqlite3执行有返回数据的时候就比较麻烦

需要先用sqlite3_prepare_v2将sql语句准备好,接着用sqlite_step一条一条读取数据,每条数据可能包含不同数据,也要用sqlite_column_xxx将他们一个一个读取出来惊恐


//    sqlite3_prepare 将UTF-8格式的SQL语句转换为指向已备语句的指针

    if (sqlite3_prepare_v2(db, [sqlQuery UTF8String], -1, &statement, nil) == SQLITE_OK) {
        while (sqlite3_step(statement) == SQLITE_ROW) {
     int num = sqlite3_column_int(statement, 0);
     char *name = (char*)sqlite3_column_text(statement, 1);
     NSString *nsNameStr = [[NSString alloc]initWithUTF8String:name];
            
     int age = sqlite3_column_int(statement, 2);
     char *sex = (char*)sqlite3_column_text(statement, 3);
     NSString *SexStr = [[NSString alloc]initWithUTF8String:sex];
            
       NSLog(@"id:%d name:%s  age:%d  sex:%s",num,name,age, sex);
       NSLog(@"id:%d name:%@  age:%d  sex:%@",num,nsNameStr,age, SexStr);
        }
    }


第三方框架FMDB是对SQLite的一种封装。主要是执行有数据返回的语句时非常方便了微笑

FMDB与SQLite基本类似


首先也是获得数据库(新建数据库就不说了):

//根据数据库路径获得数据库
FMDatabase *db=[FMDatabase databaseWithPath:fileName];

其次操作数据库必需先打开

//打开数据库
[db open];

无数据返回的执行语句

数据库增删改等操作:
除了查询操作,FMDB数据库操作都执行executeUpdate方法,这个方法返回BOOL型。

[db executeUpdate:sql];  

查询语句都使用executeQuery

// 1.执行查询语句
     FMResultSet *resultSet = [db executeQuery:@"SELECT * FROM t_student"];
     
     // 2.遍历结果
     while ([resultSet next]) {
         int ID = [resultSet intForColumn:@"id"];
         NSString *name = [resultSet stringForColumn:@"name"];
         int age = [resultSet intForColumn:@"age"];
        NSLog(@"%d %@ %d", ID, name, age);
    }





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值