FMDB本質(zhì)是對(duì)SQLit3.0的封裝,使用步驟一樣
- 1.創(chuàng)建一個(gè)類來(lái)管理數(shù)據(jù)庫(kù)
- 2.將該類設(shè)計(jì)成單例
- 3.打開(kāi)或者創(chuàng)建數(shù)據(jù)庫(kù)
- 4.創(chuàng)建表
- 5.基本操作:增刪改查
注意:swift使用FMDB不建議使用cocoapods,問(wèn)題比較多
1.把fmdb文件夾拖入項(xiàng)目
2.由于fmdb是oc寫的,轉(zhuǎn)換成swift需要橋接
2.1新建一個(gè)頭文件,暫且命名為SQLite_bridge.h
2.2在文件中導(dǎo)入#import "FMDB.h"
3.工程文件中配置引用的橋接頭文件地址,如圖

配置.png
上代碼
1.單例SQLiteManager
class SQLiteManager: NSObject {
// 1.將類設(shè)計(jì)成單例
static let shareInstance : SQLiteManager = SQLiteManager()
// 保存數(shù)據(jù)庫(kù)隊(duì)列對(duì)象
var dbQueue : FMDatabaseQueue?
// 2.打開(kāi)數(shù)據(jù)庫(kù)
func openDB (dbName : String) {
// 2.1 獲取數(shù)據(jù)庫(kù)文件存放的路徑
let path = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory,NSSearchPathDomainMask.UserDomainMask , true).first
let filePath = path?.stringByAppendingString("/" + dbName)
print(filePath)
// 2.2 創(chuàng)建數(shù)據(jù)庫(kù)
dbQueue = FMDatabaseQueue(path: filePath)
// 2.3 創(chuàng)建表
creatTable()
}
// 3.創(chuàng)建表
private func creatTable() {
// 3.1.拼接創(chuàng)建表的SQL語(yǔ)句
let creatTableSQL = "CREATE TABLE IF NOT EXISTS t_student ('id' INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,'name' TEXT,'age' INTEGER );"
// 3.2.執(zhí)行SQL語(yǔ)句
dbQueue?.inDatabase({ (db) in
if db.executeUpdate(creatTableSQL, withArgumentsInArray: nil){
print("創(chuàng)建表成功")
}
})
}
}
2.數(shù)據(jù)庫(kù)基本操作:增刪改查
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
SQLiteManager.shareInstance.openDB("t_student")
// insertData()
querydb()
}
2.1查詢
func querydb(){
// 1.拼接查詢的SQL語(yǔ)句
let querySQL = "SELECT * FROM t_student ORDER BY id DESC;"
// 2.執(zhí)行SQL語(yǔ)句
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插入數(shù)據(jù)
func insertData()
{
// 1.拼接插入的SQL語(yǔ)句
let insertSQL = "INSERT INTO t_student (name, age) VALUES (?, ?);"
// 2.執(zhí)行SQL語(yǔ)句
SQLiteManager.shareInstance.dbQueue?.inDatabase({ (db) in
if db.executeUpdate(insertSQL, withArgumentsInArray: ["chaunzhang",18]){
print("插入數(shù)據(jù)成功")
}
})
}
SQLite3 常用語(yǔ)句供查看
// 創(chuàng)建表
"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'"
// 查詢表結(jié)構(gòu)
"select sql from sqlite_master where name = 'table_name'"
callback的第三個(gè)參數(shù)
另外,sqlite3是支持事務(wù)的
int result;
result = sqlite3_exec( db, "begin transaction", 0, 0, &zErrorMsg ); //開(kāi)始一個(gè)事務(wù)
result = sqlite3_exec( db, "commit transaction", 0, 0, &zErrorMsg ); //提交事務(wù)
result = sqlite3_exec( db, "rollback transaction", 0, 0, &zErrorMsg ); //回滾事務(wù)