iOS---SQLite数据库框架之FMDB -Swift

SQLite数据库框架之FMDB

什么是FMDB

FMDB是iOS平台的SQLite数据库框架,FMDB以OC的方式封装了SQLite的C语言API。对比苹果自带的Core Data框架,更加轻量级和灵活,使用起来更加面向对象,省去了很多麻烦、冗余的C语言代码。并且FMDB提供了多线程安全的数据库操作方法,能有效地防止数据混乱。

如何集成FMDB?

这里我只写swift中的集成方式,Objective-C类似,只是不需要添加Swift extensions和桥接。

GitHub地址:https://github.com/ccgus/fmdb

方式一:

下载后将fmdb-master/src/fmdb和fmdb-master/src/extra/Swift extensions拖入项目中,添加系统库文件libsqlite3.tbd。如下图所示:

方式二:

通过CocoaPods添加,但是不推荐这种方式,因为这不是官方的。

1

2

use_frameworks!

pod ‘FMDB‘, :git => ‘https://github.com/robertmryan/fmdb.git‘

FMDB核心类

FMDatabase: 一个FMDatabase表示一个sqlite数据库,所有对数据库的操作都是通过这个类。

executeStatements: 执行多条sql。

executeQuery: 执行查询语句。

executeUpdate: 执行除查询以外的语句,create, drop, insert, delete, update。

FMDatabaseQueue: 内部封装FMDatabase和串行queue,用于多线程操作数据库,并且提供事务,建议使用这个。

inDatabase: 参数是一个闭包,在闭包里面可以获得FMDatabase对象。

inTransaction: 使用事务。

FMResultSet: 查询的结果集。

通过字段名称获取字段值。

如何使用FMDB?

一、创建表

使用FMDB和使用AFNetworking类似,最好单独创建一个工具类,使用单例进行数据库操作。

新建JFSQLiteManager类,继承NSObject。在这个类中重写构造方法创建FMDatabaseQueue对象,并创建一张数据表JF_Person。表中有4个字段,分别是id(主键)、name、age、height。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

import UIKit

class JFSQLiteManager: NSObject {

/// 创建单例

static let shareManager = JFSQLiteManager()

/// 数据库名称

private let dbName = "person.db"

/// FMDatabaseQueue对象,用于操作数据库

let dbQueue: FMDatabaseQueue

// 构造方法

override init() {

// 获取沙盒路径

let documentPath = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true).last!

// 拼接数据库完整路径

let dbPath = (documentPath as NSString).stringByAppendingPathComponent(dbName)

// 创建FMDatabaseQueue对象,会自动打开数据库,并创建一个串行队列

dbQueue = FMDatabaseQueue(path: dbPath)

super.init()

// 创建数据表

createTable("JF_Person")

}

// 创建数据表 - parameter tbName: 表名

private func createTable(tbName: String) {

// sql语句

let sql = "CREATE TABLE IF NOT EXISTS \(tbName) ( \n" +

"id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, \n" +

"name TEXT, \n" +

"age INTEGER, \n" +

"height REAL \n" +

");"

// db表示一个数据库

dbQueue.inDatabase { (db) -> Void in

// 执行sql语句,创建一张表。返回Bool类型是否创建成功

if db.executeUpdate(sql) {

print("建表成功")

} else {

print("建表失败")

}

}

}

}

然后在AppDelegate中调用这个单例,测试我们的代码

1

JFSQLiteManager.shareManager

显示 建表成功

二、删除表

在JFSQLiteManager类中实现删除表的方法,删除指定表名的数据表。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

// 删除指定数据库 - parameter tbName: 表名

func dropTable(tbName: String) {

// sql语句

let sql = "DROP TABLE \(tbName);"

// db表示一个数据库

dbQueue.inDatabase { (db) -> Void in

// 执行sql语句,创建一张表。返回Bool类型是否创建成功

if db.executeUpdate(sql) {

print("删除表成功")

} else {

print("删除表失败")

}

}

}

然后在AppDelegate中调用这个方法,测试我们的代码

1

JFSQLiteManager.shareManager.dropTable("JF_Person")

显示 删除表成功

三、增加数据

在JFSQLiteManager类中实现添加数据的方法,插入一条测试数据。这里只是测试学习,所以SQL语句就直接写死了。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

// 添加数据

func insertData() {

// sql语句

let sql = "INSERT INTO JF_Person (name, age, height) VALUES (?, ?, ?);"

JFSQLiteManager.shareManager.dbQueue.inDatabase { (db) -> Void in

if db.executeUpdate(sql, "7ag", 23, 1.95) {

print("插入数据成功")

// 获取插入数据的主键

let id = db.lastInsertRowId()

print("插入数据的id: \(id)")

}

}

}

然后在AppDelegate中调用这个方法,测试我们的代码

1

JFSQLiteManager.shareManager.insertData()

显示 插入数据成功 插入数据的id: 1

四、删除数据

在JFSQLiteManager类中实现删除数据的方法,删除id = 1的数据。这里只是测试学习,所以SQL语句就直接写死了。

1

2

3

4

5

6

7

8

9

10

11

12

13

// 删除数据

func deleteData() {

// sql语句

let sql = "DELETE FROM JF_Person WHERE id = 1;"

JFSQLiteManager.shareManager.dbQueue.inDatabase { (db) -> Void in

if db.executeUpdate(sql) {

print("删除数据成功")

}

}

}

然后在AppDelegate中调用这个方法,测试我们的代码

1

JFSQLiteManager.shareManager.deleteData()

显示 删除数据成功

五、修改数据

上面一步我们把添加的数据给删除,所以我们需要再次调用添加数据的方法,添加一条数据以供我们学习测试使用。

在JFSQLiteManager类中实现更新数据的方法,更新id = 1的数据。这里只是测试学习,所以SQL语句就直接写死了。

1

2

3

4

5

6

7

8

9

10

11

12

// 更新数据

func updateData() {

// sql

let sql = "UPDATE JF_Person SET name = ‘6ag‘, age = 24, height = 1.92 WHERE id = 1;"

JFSQLiteManager.shareManager.dbQueue.inDatabase { (db) -> Void in

if db.executeUpdate(sql) {

print("更新数据成功")

}

}

}

然后在AppDelegate中调用这个方法,测试我们的代码

1

JFSQLiteManager.shareManager.updateData()

显示 更新数据成功 !

六、查找数据

上面增、删、改中,我们执行sql语句的方法都是使用executeUpdate。但是查找数据,我们就必须使用executeQuery了。其实不管是神马操作,改变的基本都是SQL语句而已。这一点比起C语言的sqlite API来说,简直是太方便了。如果对于SQL语句不是很熟悉也没关系,在下已经为各位大神准备好了常用SQL语句:http://blog.6ag.cn/1227.html

在JFSQLiteManager类中实现更新数据的方法,查询JF_Person表中所有记录的id,name,age,height字段的值。这里只是测试学习,所以SQL语句就直接写死了。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

// 查询数据

func queryData() {

// sql

let sql = "SELECT id, name, age, height FROM JF_Person;"

JFSQLiteManager.shareManager.dbQueue.inDatabase { (db) -> Void in

guard let result = db.executeQuery(sql) else {

print("没有查询到数据")

return

}

// 获取查询结果

// next() 表示获取一条记录, 返回true表示获取到记录,false表示没有记录。所以我们使用循环来获取所有查询到的数据

while result.next() {

let id = result.intForColumn("id")

let name = result.stringForColumn("name")

let age = result.intForColumn("age")

let height = result.doubleForColumn("height")

// 打印出查询到的数据

print("id: \(id), name: \(name), age: \(age), height: \(height)")

print("------------")

}

}

}

然后在AppDelegate中调用这个方法,测试我们的代码

1

JFSQLiteManager.shareManager.queryData()

打印出

id: 1, name: 6ag, age: 24, height: 1.92 

------------

时间: 2024-12-19 03:16:41

iOS---SQLite数据库框架之FMDB -Swift的相关文章

SQLite数据库框架--FMDB简单介绍

1.什么是FMDB FMDB是iOS平台的SQLite数据库框架 FMDB以OC的方式封装了SQLite的C语言API 2.FMDB的优点 使用起来更加面向对象,省去了很多麻烦.冗余的C语言代码 对比苹果自带的Core Data框架,更加轻量级和灵活 提供了多线程安全的数据库操作方法,有效地防止数据混乱 3.FMDB的github地址 https://github.com/ccgus/fmdb 二.核心类 FMDB有三个主要的类 (1)FMDatabase 一个FMDatabase对象就代表一个

iOS sqlite数据库实现(转)

转载自:http://www.cnblogs.com/macroxu-1982/archive/2012/10/01/2709960.html 1 实现过程添加libsqlite3组件 选择项目后,在展示的xcodepro文件配置界面中配置 build phases -> Link Binary With Libraries -->+ -->libsqlite3.dylib 2 在当前项目中添加sqlite 数据库 3 实现app运行时,将sqlite文件复制到沙盒中 4 实现查询数据库

IOS SQLite数据库

简介 在IOS中使用Sqlite来处理数据.如果你已经了解了SQL,那你可以很容易的掌握SQLite数据库的操作. 实例步骤 1.创建一个简单的View based application 2.选择项目文件,然后选择目标,添加libsqlite3.dylib库到选择框架 3.通过选择" File-> New -> File... -> "选择 Objective C class 创建新文件,单击下一步 4."sub class of"为NSObje

iOS sqlite数据库使用

关于sqlite是一个轻量的.跨平台的.开源的数据库引擎.他在读写效率,操作便捷程度,内存消耗上具有很大的优越性,所以很受移动开发者的喜爱.当然,sqlite 也因其力求简单高效,也就限制了它对并发,海量数据的处理.这篇博客主要讲的是iOS开发中sqlite和开源库FMDB的使用. demo 地址 TP 常使用的方法介绍 首先打开数据库 int result = sqlite3_open_v2(fileName.UTF8String, &db, SQLITE_IOERR_READ|SQLITE_

SQlite数据库框架:LitePal

常用的数据库框架Android的发展的速度是难以置信的,Android出来哪一年我还在小学上学很,还能很清楚的记得,那年一切,但是那个时候的我怎么可能也不会想到自己将来会要去做Android.Android数据库的框架很多,选择自己喜欢的,不用掌握很多,选择自己喜欢的就好. Sugar&GreenDao&Afinal&ORMLite&Realm&LiteOrm&DBFlow&ActiveAndroid&LitePal SugarORM 是对象

iOS: Sqlite数据库的功能:建表,增加,删除,修改,查找

 本篇主要介绍Sqlite数据库的功能:建表,增加,删除,修改,查找. 采用封装的方法写的,继承于NSObject. 需向工程中添加libsqlite3.tbd库. #import "DataBaseHandle.h" //引入头文件 #import <sqlite3.h> @interface DataBaseHandle() //用来存放数据库的路径 @property (nonatomic,strong) NSString *filePath; @end @imple

IOS sqlite数据库增删改查

1.简单介绍 简单封装sqlite数据库操作类 BaseDB 用于完毕对sqlite的增删改查.使用前先导入libsqlite3.0.dylib库 2.BaseDB.h // // BaseDB.h // SqliteDemo // // Created by 赵超 on 14-8-26. // Copyright (c) 2014年 赵超. All rights reserved. // #import <Foundation/Foundation.h> #import "sqli

ios Sqlite数据库增删改查基本操作

研究了几天的数据库,终于把它给搞出来了.Sqlite是ios上最常用的数据库之一,大家还是有必要了解一下的.这是仿照网上的一个例子做的,有些部分写的不好,我稍作了修改,以讲解为主,主要让大家能够明白如何修改,明白原理,达到举一反三的目的. 先来看看效果图 先来看看数据库方法类,将各个操作都封装在一个类里面,达到代码重用的目的,这是程序员都应该努力去实现的目标,这样在下一次用到同样的方法和类的时候,就可以直接使用封装好的类,可以节约大量的时间. 先来看看.h文件 #import <Foundati

转:ios Sqlite数据库增删改查基本操作

研究了几天的数据库,终于把它给搞出来了.Sqlite是ios上最常用的数据库之一,大家还是有必要了解一下的.这是仿照网上的一个例子做的,有些部分写的不好,我稍作了修改,以讲解为主,主要让大家能够明白如何修改,明白原理,达到举一反三的目的. 先来看看效果图 先来看看数据库方法类,将各个操作都封装在一个类里面,达到代码重用的目的,这是程序员都应该努力去实现的目标,这样在下一次用到同样的方法和类的时候,就可以直接使用封装好的类,可以节约大量的时间. 先来看看.h文件 #import <Foundati