【iOS】使用SQLite与FMDB
iOS中的SQLite与Android中的一模一样,仅仅是调用方法有差异。假设单从调用来讲,Android封装的一套helper更好用一些,而iOS原生的用C语言的几个函数在操作,比較麻烦。只是引入第三方框架FMDB,使用起来就方便非常多。
一、SQLite的基本使用
使用步骤:
// 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的使用
// 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不是线程安全的)
【iOS】使用SQLite与FMDB的更多相关文章
- iOS之Sqlite和FMDB
在iOS 开发中,总会用到数据库的操作,来实现增.删.改.查. 尤其是查询. 一旦涉及到查询的操作,那就非得用数据库不可了. SQLite (http://www.sqlite.org/docs. ...
- iOS开发--SQLite重要框架FMDB的使用
什么是FMDB: FMDB是一个和iOS的SQLite数据库操作相关的第三方框架.主要把C语言操作数据库的代码用OC进行了封装.使用者只需调用该框架的API就能用来创建并连接数据库,创建表,查询等. ...
- iOS开发数据库篇—FMDB简单介绍
iOS开发数据库篇—FMDB简单介绍 一.简单说明 1.什么是FMDB FMDB是iOS平台的SQLite数据库框架 FMDB以OC的方式封装了SQLite的C语言API 2.FMDB的优点 使用起来 ...
- iOS开发数据库篇—FMDB数据库队列
iOS开发数据库篇—FMDB数据库队列 一.代码示例 1.需要先导入FMDB框架和头文件,由于该框架依赖于libsqlite库,所以还应该导入该库. 2.代码如下: // // YYViewContr ...
- 在iOS开发中使用FMDB
在iOS开发中使用FMDB 前言 SQLite (http://www.sqlite.org/docs.html) 是一个轻量级的关系数据库.iOS SDK 很早就支持了 SQLite,在使用时,只需 ...
- iOS中SQLite知识点总结2
数据库(SQLite) 01-多表查询 格式:select 字段1,字段2,... from 表名1,表名2; 别名:select 别名1.字段1 as 字段别名1,别名2.字段2 as 字段别名2, ...
- iOS 数据库操作(使用FMDB)
iOS 数据库操作(使用FMDB) iOS中原生的SQLite API在使用上相当不友好,在使用时,非常不便.于是,就出现了一系列将SQLite API进行封装的库,例如FMDB.Plausibl ...
- [iOS]数据库第三方框架FMDB详细讲解
[iOS]数据库第三方框架FMDB详细讲解 初识FMDB iOS中原生的SQLite API在进行数据存储的时候,需要使用C语言中的函数,操作比较麻烦.于是,就出现了一系列将SQLite API进行封 ...
- 【转】在iOS开发中使用FMDB
本文转载自:唐巧的博客 在iOS开发中使用FMDB APR 22ND, 2012 前言 SQLite (http://www.sqlite.org/docs.html) 是一个轻量级的关系数据库.iO ...
- 我为什么用 SQLite 和 FMDB 而不用 Core Data
凭良心讲,我不能告诉你不去使用Core Data.它不错,而且也在变好,并且它被很多其他Cocoa开发者所理解,当有新人加入你的组或者需要别人接手你的项目的时候,这点很重要.更重要的是,不值得花时间和 ...
随机推荐
- InputStream中read()与read(byte[] b)(转)
read()与read(byte[] b)这两个方法在抽象类InputStream中前者是作为抽象方法存在的,后者不是,JDK API中是这样描述两者的: 1:read() : 从输入流中读取数据的下 ...
- SQLite/嵌入式数据库
SQLite/嵌入式数据库 的项目要么不使用数据库(一两个文配置文件就可以搞定),要么就会有很多的数据,用到 postgresql,操练sqlite的还没有.现在我有个自己的小测试例子,写个数据库对比 ...
- Java排序算法(四):Shell排序
[基本的想法] 将原本有大量记录数的记录进行分组.切割成若干个子序列,此时每一个子序列待排序的记录个数就比較少了,然后在这些子序列内分别进行直接插入排序,当整个序列都基本有序时.再对全体记录进行一次直 ...
- 实例:怎样使用 Netty 下载文件
本实例主要參考的是官网的examples:点击这里 使用场景:client向Netty请求一个文件,Netty服务端下载指定位置文件到client. 本实例使用的是Http协议,当然,能够通过简单的改 ...
- 实时人脸检测 (Real-Time Face Detection)
源地址:http://blog.sina.com.cn/s/blog_79b67dfe0102uzra.html 最近需要用到人脸检测,于是找了篇引用广泛的论文实现了一下:Robust Real-Ti ...
- ThinkPHP 的模型使用详细介绍--模型的核心(七)
原文:ThinkPHP 的模型使用详细介绍--模型的核心(七) 注意:本节是ThinkPhp框架对数据操作的核心处理部分 大家还是在这里看清楚可以将其剪切放到代码编辑器中查看 本章节给大家着重介绍模型 ...
- Hawk-数据抓取工具
Hawk-数据抓取工具:简明教程 Hawk: Advanced Crawler& ETL tool written in C#/WPF 1.软件介绍 HAWK是一种数据采集和清洗工具,依据 ...
- 陈词滥调,正确使用memset
前项目发现一个问题,计划永远是一个dynamic_cast当一个异常动态转换,搜索了半天才发现问题竟然是在memset使用,见.但当处于几十万行代码量级中时,就变得不太那么easy定位了. 本文归纳了 ...
- Struts2中指定的校验文件不起作用的原因
转载请注意出处:http://blog.csdn.net/bettarwang/article/details/39801733 我们知道,假设要为某个Action指定校验文件.那么就要将" ...
- 【C语言疯狂讲义】(八)C语言一维数组
1.数组的基本概念: 同样类型 若干个 有序 由若干个同样类型的数据组成的有序的集合 有序:存储地址连续 下标连续 数组名:用来存放数组首地址的变量 数组元素:构成数组的每个数据 数组的 ...