ios(六)sqlite3以及FMDB

来源:互联网 发布:数据结构与算法公开课 编辑:程序博客网 时间:2024/05/20 11:51

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);    }





0 0
原创粉丝点击