swift-FMDB簡(jiǎn)單使用

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ù)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容