SQLite与FMDB使用中区别
前几篇已经写完了SQLite与FMDB的基本内容以及衍生出来的知识点,我们这一篇主要讲述FMDB与SQLite在基本使用中的区别,大约需要5-10分钟时间讲述内容,欢迎大家指正。
基本使用区别
1.数据库的操作对象
(1)SQLite通过sqlite3
sqlite3 *_db;
(2)FMDB方式
FMDatabase *db;
2.打开数据库方式
(1)SQLite方式
- (void)openDB{ //获取数据库文件路径 NSString *doc = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject]; NSString *fileName = [doc stringByAppendingPathComponent:@"students.sqlite"]; //将OC字符串转换为c语言的字符串 const char *cfileName = fileName.UTF8String; //打开数据库文件(如果数据库文件不存在,那么该函数会自动创建数据库文件) int result = sqlite3_open(cfileName, &_db); if (result == SQLITE_OK) {//打开成功 NSLog(@"成功打开数据库"); }else{ NSLog(@"打开数据库失败"); } }
(2)FMDB方式
- (void)openDB{ //1、获取数据库文件路径 NSString *doc = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject]; NSString *fileName = [doc stringByAppendingPathComponent:@"students.sqlite"]; //2、获取数据库连接 _db = [FMDatabase databaseWithPath:fileName]; //3、打开数据库连接 if ([_db open]) { NSLog(@"打开数据库成功"); }else{ NSLog(@"打开数据库失败"); } }
3.创建表格
(1)SQLite方式
- (void)createTable{ //创建表 const char *sql = "CREATE TABLE IF NOT EXISTS t_student(id integer PRIMARY KEY AUTOINCREMENT,name text NOT NULL,age integer NOT NULL);"; char *errmsg= NULL; int result = sqlite3_exec(_db, sql, NULL, NULL, &errmsg); if (result==SQLITE_OK) { NSLog(@"创建表成功"); }else{ NSLog(@"创建表失败---%s",errmsg); } }
(2)FMDB方式
- (void)createTable{ 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(@"创建表格成功"); }else{ NSLog(@"创建表格失败"); } }
4.插入数据
(1)SQLite方式
- (void)insertData{ //插入数据 for (int i=0; i<10; i++) { //拼接sql语句 NSString *name = [NSString stringWithFormat:@"yixiangboy--%d",arc4random_uniform(100)]; int age = arc4random_uniform(20)+10; NSString *sql = [NSString stringWithFormat:@"INSERT INTO t_student (name,age) VALUES ('%@',%d);",name,age]; //执行SQL语句 char *errmsg = NULL; sqlite3_exec(_db, sql.UTF8String, NULL, NULL, &errmsg); if (errmsg) {//如果有错误信息 NSLog(@"插入数据失败--%s",errmsg); }else{ NSLog(@"插入数据成功"); } } }
(2)FMDB方式
- (void)insertData{ for (int i=0; i<10; i++) { NSString *name = [NSString stringWithFormat:@"yixiang-%d",arc4random_uniform(100)]; int age = arc4random_uniform(20)+10; BOOL result = [_db executeUpdate:@"INSERT INTO t_student (name, age) VALUES (?, ?);",name, @(age)]; if (result) { NSLog(@"插入成功"); }else{ NSLog(@"插入失败"); } } }
5.删除数据
(1)SQLite方式
- (void)deleteData{ //删除age小于15的数据 NSString *sql = [NSString stringWithFormat:@"DELETE FROM t_student WHERE age<15"]; char *errmsg = NULL; sqlite3_exec(_db, sql.UTF8String, NULL, NULL, &errmsg); if (errmsg) { NSLog(@"删除数据失败"); }else{ NSLog(@"删除数据成功"); } }
(2)FMDB方式
- (void)deleteData{ BOOL result = [_db executeUpdate:@"DELETE FROM t_student WHERE age<15"]; if (result) { NSLog(@"删除成功"); }else{ NSLog(@"删除失败"); } }
6.更新数据
(1)SQLite方式
- (void)updateData{ //大于20岁的都置为20岁 NSString *sql = [NSString stringWithFormat:@"UPDATE t_student set age=20 WHERE age>20"]; char *errmsg = NULL; sqlite3_exec(_db, sql.UTF8String, NULL, NULL, &errmsg); if (errmsg) { NSLog(@"更新数据失败"); }else{ NSLog(@"更新数据成功"); } }
(2)FMDB方式
- (void)updateData{ BOOL result = [_db executeUpdate:@"UPDATE t_student set age=20 WHERE age>20"]; if (result) { NSLog(@"更新成功"); }else{ NSLog(@"更新失败"); } }
7.查询数据
(1)SQLite方式
- (void)queryData{ const char *sql = "SELECT id,name,age FROM t_student WHERE age<20"; sqlite3_stmt *stmt = NULL; //进行查询前的准备工作 if(sqlite3_prepare_v2(_db, sql, -1, &stmt, NULL)==SQLITE_OK){//SQL语句没有问题 NSLog(@"查询语句没有问题"); //每调用一次sqlite3_step函数,stmt就会指向下一条记录 while (sqlite3_step(stmt)==SQLITE_ROW) {//找到一条记录 //取出数据 //(1)取出第0个字段的值(int) int ID=sqlite3_column_int(stmt, 0); //(2)取出第一列字段的值(text) const unsigned char *name = sqlite3_column_text(stmt, 1); //(3)取出第二列字段的值(int) int age = sqlite3_column_int(stmt, 2); printf("%d %s %d\n",ID,name,age); } }else{ NSLog(@"查询语句有问题"); } }
(2)FMDB方式
- (void)queryData{ FMResultSet *resultSet = [_db executeQuery:@"SELECT * FROM t_student WHERE age > ?",@(20)]; while ([resultSet next]) { int ID = [resultSet intForColumn:@"id"]; NSString *name = [resultSet stringForColumn:@"name"]; int age = [resultSet intForColumn:@"age"]; NSLog(@"%d %@ %d",ID,name,age); } }
以上就是SQLite在基本使用上与FMDB的区别,内容比较简短,但还是比较清晰的,希望对大家有所帮助,下一篇将讲述苹果官方自带的CoreData数据库。