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://github.com/ccgus/fmdb上进行学习,写的相当具体。


转载请注明出处:http://blog.csdn.net/xn4545945  


【iOS】使用SQLite与FMDB的更多相关文章

  1. iOS之Sqlite和FMDB

    在iOS 开发中,总会用到数据库的操作,来实现增.删.改.查. 尤其是查询. 一旦涉及到查询的操作,那就非得用数据库不可了.   SQLite (http://www.sqlite.org/docs. ...

  2. iOS开发--SQLite重要框架FMDB的使用

    什么是FMDB: FMDB是一个和iOS的SQLite数据库操作相关的第三方框架.主要把C语言操作数据库的代码用OC进行了封装.使用者只需调用该框架的API就能用来创建并连接数据库,创建表,查询等. ...

  3. iOS开发数据库篇—FMDB简单介绍

    iOS开发数据库篇—FMDB简单介绍 一.简单说明 1.什么是FMDB FMDB是iOS平台的SQLite数据库框架 FMDB以OC的方式封装了SQLite的C语言API 2.FMDB的优点 使用起来 ...

  4. iOS开发数据库篇—FMDB数据库队列

    iOS开发数据库篇—FMDB数据库队列 一.代码示例 1.需要先导入FMDB框架和头文件,由于该框架依赖于libsqlite库,所以还应该导入该库. 2.代码如下: // // YYViewContr ...

  5. 在iOS开发中使用FMDB

    在iOS开发中使用FMDB 前言 SQLite (http://www.sqlite.org/docs.html) 是一个轻量级的关系数据库.iOS SDK 很早就支持了 SQLite,在使用时,只需 ...

  6. iOS中SQLite知识点总结2

    数据库(SQLite) 01-多表查询 格式:select 字段1,字段2,... from 表名1,表名2; 别名:select 别名1.字段1 as 字段别名1,别名2.字段2 as 字段别名2, ...

  7. iOS 数据库操作(使用FMDB)

    iOS 数据库操作(使用FMDB)   iOS中原生的SQLite API在使用上相当不友好,在使用时,非常不便.于是,就出现了一系列将SQLite API进行封装的库,例如FMDB.Plausibl ...

  8. [iOS]数据库第三方框架FMDB详细讲解

    [iOS]数据库第三方框架FMDB详细讲解 初识FMDB iOS中原生的SQLite API在进行数据存储的时候,需要使用C语言中的函数,操作比较麻烦.于是,就出现了一系列将SQLite API进行封 ...

  9. 【转】在iOS开发中使用FMDB

    本文转载自:唐巧的博客 在iOS开发中使用FMDB APR 22ND, 2012 前言 SQLite (http://www.sqlite.org/docs.html) 是一个轻量级的关系数据库.iO ...

  10. 我为什么用 SQLite 和 FMDB 而不用 Core Data

    凭良心讲,我不能告诉你不去使用Core Data.它不错,而且也在变好,并且它被很多其他Cocoa开发者所理解,当有新人加入你的组或者需要别人接手你的项目的时候,这点很重要.更重要的是,不值得花时间和 ...

随机推荐

  1. qt+boost::asio+tcp文件传输

    客户端: void qt_boost::pbSendFileClicked(){ QString filename = ui.leFileName->text(); QByteArray ba ...

  2. Missing artifact net.sf.json-lib:json-lib:jar:2.2.3:compile

    json-lib是需要区分jdk版本的,pom.xml中的配置应加上<classifier>标签,如用jdk15: <dependency> <groupId>ne ...

  3. C++ 11 右值引用以及std::move

    转载请注明出处:http://blog.csdn.net/luotuo44/article/details/46779063 新类型: int和int&是什么?都是类型.int是整数类型,in ...

  4. [ACM] hdu 4405 Aeroplane chess (概率DP)

    Aeroplane chess Problem Description Hzz loves aeroplane chess very much. The chess map contains N+1 ...

  5. ThinkPHP 3.2 开发过程

    原文:ThinkPHP 3.2 开发过程 设置所有项目的公共配置Application\Common\Conf\config.php,SAE模式下配置文件为config_sae.php 配置默认的模块 ...

  6. firebug使用

    查看网页的header是优化web应用的关键一环,从header中,可以检查到非常 多的信息:网页在squid中的缓存时间(age).客户端缓存时间(expires).是否有最后修改时间(last-m ...

  7. OCA读书笔记(12) - 数据库维护

    查询优化器统计信息 搜集统计信息: 不是实时的: SQL> conn /as sysdbaConnected.SQL> grant select on dba_objects to sco ...

  8. ruby on rails创建的页面訪问很慢

    ruby on rails创建的页面訪问很慢 用rvm安装的ruby1.9.3 解决:cd ~/.rvm/rubies/ruby-1.9.3-p547/lib/ruby/1.9.1/webrick v ...

  9. VSTO学习笔记(五)批量编辑Excel 2010 x64

    原文:VSTO学习笔记(五)批量编辑Excel 2010 x64 近期因为工作的需要,经常要批量处理大量的Excel文件,如果纯手工一个个修改,非常的麻烦,于是写了这么一个帮助类,希望能对你有所帮助. ...

  10. Linux下搭建tomcat集群全记录(转)

    本文将讲述如何在Linux下搭建tomcat集群,以及搭建过程中可能的遇到的问题和解决方法.为简单起见,本文演示搭建的集群只有两个tomact节点外加一个apache组成,三者将安装在同一机器上:ap ...