FMDB本质是对SQLit3.0的封装,使用步骤一样
- 1.创建一个类来管理数据库
- 2.将该类设计成单例
- 3.打开或者创建数据库
- 4.创建表
- 5.基本操作:增删改查
注意:swift使用FMDB不建议使用cocoapods,问题比较多
1.把fmdb文件夹拖入项目
2.由于fmdb是oc写的,转换成swift需要桥接
2.1新建一个头文件,暂且命名为SQLite_bridge.h
2.2在文件中导入#import "FMDB.h"
3.工程文件中配置引用的桥接头文件地址,如图
上代码
1.单例SQLiteManager
class SQLiteManager: NSObject {
// 1.将类设计成单例
static let shareInstance : SQLiteManager = SQLiteManager()
// 保存数据库队列对象
var dbQueue : FMDatabaseQueue?
// 2.打开数据库
func openDB (dbName : String) {
// 2.1 获取数据库文件存放的路径
let path = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory,NSSearchPathDomainMask.UserDomainMask , true).first
let filePath = path?.stringByAppendingString("/" + dbName)
print(filePath)
// 2.2 创建数据库
dbQueue = FMDatabaseQueue(path: filePath)
// 2.3 创建表
creatTable()
}
// 3.创建表
private func creatTable() {
// 3.1.拼接创建表的SQL语句
let creatTableSQL = "CREATE TABLE IF NOT EXISTS t_student ('id' INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,'name' TEXT,'age' INTEGER );"
// 3.2.执行SQL语句
dbQueue?.inDatabase({ (db) in
if db.executeUpdate(creatTableSQL, withArgumentsInArray: nil){
print("创建表成功")
}
})
}
}
2.数据库基本操作:增删改查
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
SQLiteManager.shareInstance.openDB("t_student")
// insertData()
querydb()
}
2.1查询
func querydb(){
// 1.拼接查询的SQL语句
let querySQL = "SELECT * FROM t_student ORDER BY id DESC;"
// 2.执行SQL语句
SQLiteManager.shareInstance.dbQueue?.inDatabase({ (db) in
let result = db.executeQuery(querySQL, withArgumentsInArray: nil)
while result.next(){
let studentId = result.stringForColumn("id")
let studentName = result.stringForColumn("name")
print(studentId,studentName)
}
})
}
2.2插入数据
func insertData()
{
// 1.拼接插入的SQL语句
let insertSQL = "INSERT INTO t_student (name, age) VALUES (?, ?);"
// 2.执行SQL语句
SQLiteManager.shareInstance.dbQueue?.inDatabase({ (db) in
if db.executeUpdate(insertSQL, withArgumentsInArray: ["chaunzhang",18]){
print("插入数据成功")
}
})
}
SQLite3 常用语句供查看
// 创建表
"CREATE TABLE FEED_TABLE(FeedID TEXT, Title TEXT, Summary TEXT, Author TEXT, ImageName VARCHAR(21), ImageType TEXT, MaxIndex INT, ImageData BLOB)"
// 查询记录
"select * form 'table_name'"
"select * form 'table name' where value = '?'"
// 插入记录
"INSERT INTO FEED_TABLE(FeedID, Title, Summary, ImageName, ImageType, MaxIndex) VALUES('%s', '%s', '%s', '%s', '%s', %d)"
// 更新记录
"update 'table_name' 'column_name' = 'value'"
// 删除记录
"DELETE FROM FAVORITE_TABLE WHERE EntryIndex = %d"
// 删除所有记录
"delete from 'table_name'"
// 删除表
"drop table 'table_name'"
// 查询表结构
"select sql from sqlite_master where name = 'table_name'"
callback的第三个参数
另外,sqlite3是支持事务的
int result;
result = sqlite3_exec( db, "begin transaction", 0, 0, &zErrorMsg ); //开始一个事务
result = sqlite3_exec( db, "commit transaction", 0, 0, &zErrorMsg ); //提交事务
result = sqlite3_exec( db, "rollback transaction", 0, 0, &zErrorMsg ); //回滚事务