【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开发者所理解,当有新人加入你的组或者需要别人接手你的项目的时候,这点很重要.更重要的是,不值得花时间和 ...
随机推荐
- Delphi与C++的语法区别(六点区别) good
一.Delphi永远没办法在栈上创建一个对象 下面是一段常见的的Delphi代码,在过程的开头声明本过程所需要的全部局部变量: procedure Foo;var obj: TObject; //这句 ...
- Github干货系列:C++资源集合-
Awesome CPP,这又是一个 Awesome XXX 系列的资源整理,由 fffaraz 发起和维护.内容包括:标准库.Web应用框架.人工智能.数据库.图片处理.机器学习.日志.代码分析等. ...
- JavaScript引用类型之Object类
ECMAScript中的Object类跟Java中的Object类相似,ECMAScript中的全部类都由这个类继承而来,Object类中的全部属性和方法都会出如今其他类中,所以理解Object类,就 ...
- .Net——使用.net内置处理程序处理自己定义节点Demo
在.net中.由于对不同的节点,都相应着类去对它进行处理,.net里面为了方便.已经内置了一些类供我们使用.使我们在读取配置文件时.不必自己去定义类去处理自己定义的自己定义节点. 以下我们写了这样一个 ...
- CMake Intro - CMakeLists.txt
Notes: directory structure: cmake, cmake/Tutorial, cmake/Tutorial/MathLibs 1. File lists in cmake/ ...
- WPF案例 (三) 模拟QQ“快速换装"界面
原文:WPF案例 (三) 模拟QQ"快速换装"界面 这个小程序使用Wpf模拟QQ快速换装页面的动画特效,通过使用组合快捷键Ctrl+Left或Ctrl+Right,可实现Image ...
- hdu2159(二维完全背包)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2159 题意:打怪,还有最后一级,忍耐度有限m,问在杀怪数量上限为s的情况下能否获取n经验而通关,且忍耐 ...
- 从尾到头打印链表--《剑指offer》
题目:非常easy,就是题目,将链表从尾到头打印出来. 可能我们首先想到的是将链表进行遍历,将之前的訪问的数据进行保存,最后进行反向输出,但是保存数据的空间是个问题:或者是我们将整个链表进行反向操作, ...
- hdu1166(线段树)
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=1166 线段树功能:update:单点增减 query:区间求和 #pragma comment(lin ...
- Codeforces #252 (Div. 2) B. Valera and Fruits
题目倒是不难,可是读起来非常恶心 依据题目的描写叙述不easy找到适合存储的方法 后来我就想不跟着出题人的思路走 我自己开一个数组c 令c[a[i]] = b[i] 则c[i] == [j] 代表第i ...