博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【iOS】使用SQLite与FMDB
阅读量:4656 次
发布时间:2019-06-09

本文共 4228 字,大约阅读时间需要 14 分钟。

iOS中的SQLite与Android中的一模一样,仅仅是调用方法有差异。假设单从调用来讲,Android封装的一套helper更好用一些,而iOS原生的用C语言的几个函数在操作,比較麻烦。只是引入第三方框架FMDB,使用起来就方便非常多。

一、SQLite的基本使用

使用步骤:

1.
导入系统框架
(C
语言
)
. (libsqlite3)
2.
头文件
#import<
sqlite3.h
>.
3
.
sqlite3_open
(fileName.UTF8String, &
_
db
); 
打开或者创建一个数据
*_db
自定义一个
sqlite3
的成员变量
.
进行正删改查时要用
.
4.
sqlite3_exec
(_db, sql, NULL, NULL,&error);
*
该函数可进行
insert
,
delete
,
update
操作
.
5
.
查询操作
select
.
*
sqlite3_prepare_v2
(_db, sql, -1, &stmt, NULL);
做查询前准备
,
检測
SQL
语句是否正确
.
*
sqlite3_step(stmt)
提取查询到的数据
,
一次提取一条
.
*
sqlite3_column_text(stmt, 0)
取出第
0
列的数据
.
直接看代码更易懂:
创建或打开数据库:
// 0.获取文件地址    NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)lastObject];    NSString *fileName = [path stringByAppendingPathComponent:@"t_student.sqlite"];    	// 1.打开或者创建一个数据库    // (1.假设数据库不存在就会自己主动创建数据库并打开, 2.假设数据库存储就会自己主动打开数据库)    int result = sqlite3_open(fileName.UTF8String, &_db);    if (result == SQLITE_OK) {        NSLog(@"打开数据库成功");        // 2.创建表        /**         sqlite3 传递已经打开的数据库         sql: 须要运行的数据库语句         */        const char *sql = "CREATE TABLE IF NOT EXISTS t_student(id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, age INTEGER NOT NULL);";        char *error = nil;        // 在db数据库中运行sql语句        sqlite3_exec(self.db, sql, NULL, NULL, &error);        if (error) {            NSLog(@"创建表失败");        }else        {            NSLog(@"创建表成功");        }    }else    {         NSLog(@"打开数据库失败");    }
插入数据:(更新,删除与此类似)
// 1.拼接插入sql语句        NSString *name = [NSString stringWithFormat:@"Jonathan-%d", i];        int age = arc4random_uniform(100);        NSString *sql = [NSString stringWithFormat:@"INSERT INTO t_student(name, age) VALUES ('%@', %d);", name, age];        char *error = nil;        // 2.运行插入sql语句        sqlite3_exec(self.db, sql.UTF8String, NULL, NULL, &error);        if (error) {            NSLog(@"加入失败");        }else        {            NSLog(@"加入成功");        }
查询数据:
const char *sql = "SELECT name, age FROM t_student;";//    char *error = nil;//    sqlite3_exec(self.db, sql, NULL, NULL, &error);    sqlite3_stmt *stmt; // 用于提取数据的    // 1.做查询前的准备, 检查sql语句是否正确    int result = sqlite3_prepare_v2(self.db, sql, -1, &stmt, NULL);    if (result == SQLITE_OK) {// 准备完毕, 没有错误        // 2.提取查询到的数据到stmt, 一次提取一条        // 假设返回值为SQLITE_ROW, 就代表提取到了一条记录       while(sqlite3_step(stmt) == SQLITE_ROW)       {           // 3.取出提取到的记录(数据)中的第0列的数据           const unsigned char *name = sqlite3_column_text(stmt, 0);           int age = sqlite3_column_int(stmt, 1);           NSLog(@"%s %d", name, age);       }    }
二、FMDB的使用
FMDB的优点是对基本C库的封装,方便使用。同一时候还提供了多线程操作数据库带来的读脏数据等问题的方法。
框架地址:
使用:(须要
FMDatabase *db
成员变量
创建或打开:
// 0.获取沙盒路径    NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)lastObject];    NSString *fileName = [path stringByAppendingPathComponent:@"t_student.sqlite"];    	// 1.获得数据库对象    self.db = [FMDatabase databaseWithPath:fileName];        // 2.打开数据库    if ([self.db open]) {        NSLog(@"打开成功");        // 2.1创建表       BOOL success =  [self.db executeUpdate:@"CREATE TABLE IF NOT EXISTS t_student (id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, name TEXT NOT NULL, age INTEGER NOT NULL);"];        if (success) {            NSLog(@"创建表成功");        }else        {            NSLog(@"创建表失败");        }    }else    {        NSLog(@"打开失败");    }
插入操作:
(更新,删除与此类似)
BOOL success = [self.db executeUpdate:@"INSERT INTO t_student(name , age) VALUES(?, ?);", @"xuneng", @(10)];// 注意仅仅能拼接对象类型        if (success) {            NSLog(@"加入成功");        }else        {            NSLog(@"加入失败");        }
查询:
// 1.查询    FMResultSet *set = [self.db  executeQuery:@"SELECT * FROM t_student;"];        // 2.取出数据    while ([set next]) {                // 取出姓名//       NSString *name = [set stringForColumnIndex:1];        // 取出年龄//       int age = [set intForColumnIndex:2];        NSString *name = [set stringForColumn:@"name"];        int age = [set intForColumn:@"age"];        NSLog(@"name = %@, age = %d", name, age);    }
FMDB还能定义操作队列
FMDatabaseQueue
,这个队列是线程安全的。(
FMDatabase不是线程安全的
同一时候还能开启
事物
、提交事物。使用相当方便。
可參照上进行学习,写的相当具体。
转载请注明出处:  

转载于:https://www.cnblogs.com/mfrbuaa/p/3984498.html

你可能感兴趣的文章
Array去重探究
查看>>
SQL判断某列中是否包含中文字符、英文字符、纯数字
查看>>
状压DP
查看>>
Java数据结构和算法(十五)——无权无向图
查看>>
守护进程(Daemon)
查看>>
js页面跳转整理(转载未整理)
查看>>
SVN 常用命令一览表
查看>>
css中可继承和不可继承属性
查看>>
980. Unique Paths III
查看>>
git 博客搭建
查看>>
7-13 求链式线性表的倒数第K项(20 分)
查看>>
快速排序
查看>>
一口一口吃掉Struts(十)——异常自动处理机制
查看>>
并查集,以及可拆分并查集
查看>>
六个优雅的 Linux 命令行技巧
查看>>
MyBatis源码分析
查看>>
treeview属性 Autoexpand 、HotTrack、readOnly、ShowButtons、
查看>>
ArrayList构造函数
查看>>
C8051F_CAN
查看>>
初写Python
查看>>