ios学習ノートのFMDBの基本使用

5421 ワード

はじめに
FMDBフレームワークの使い方を学ぶには、公式ドキュメントを読んでgithubで「FMDB」を検索し、このフレームワークを見つけ、CocoaPodsでインストールしたり、Downloadしたりして、説明に従ってfmdbフォルダを直接プロジェクトにドラッグすると、libsqlite 3.0.tbdを導入したり、swift版でブリッジヘッダファイルを作成したりして、#import"FMDB.h"を入力する必要があります.
二例
1通常版
デスクトップにフォルダdbを作成し、プロジェクトにクラスSQLiteToolを作成します.
import Foundation

class SQLiteTool : NSObject{
//       ,      
static let shareInstance = SQLiteTool()
    
var db:FMDatabase?
override init() {
        super.init()
        
//                 
        db = FMDatabase(path:"Users/huwenkuan/Desktop/db/demo.sqlite")
        if (db?.open())! {
            print("       ")
            createTable() //           
        }else{
            print("       ")
        }
        
    }


//      t_stu
func createTable() -> () {
        let sql = "create table if not exists t_stu(id integer primary key autoincrement,name text not null,age integer,score real default 60) "
        
        let result = db?.executeUpdate(sql, withArgumentsIn: nil)
        
        if result! {
            print("yes")
        }else{
            print("no")
        }
}

//       
func insertRecord() -> () {
        let sql = "insert into t_stu(name,age,score) values('zhangsan',19,99.0)"
        
        let result = db?.executeUpdate(sql, withArgumentsIn: nil)
        
        if result!{
            print("      ")
        }else{
            print("      ")
        }
        
    }


//       
func queryAll() -> () {
        let sql = "select * from t_stu"
        
//                     
       guard let resultSet = db?.executeQuery(sql, withArgumentsIn: nil)
        else{
            return
        }
        
        
//               
        while resultSet.next() {
            let name = resultSet.string(forColumn: "name")
            let id = resultSet.int(forColumn: "id")
            let age = resultSet.int(forColumn: "age")
            let score = resultSet.double(forColumn: "score")
            
            print(name,id,age,score)
        }
        
        
        
    }

//        
func executeStaments() -> () {
        let sql = "insert into t_stu(name,age,score) values('zhangsanfeng',21,83.0);insert into t_stu(name,age,score) values('wangermazi',22,68.0);insert into t_stu(name,age,score) values('lala',23,85.0);insert into t_stu(name,age,score) values('lili',25,38.0)"
        
        let result = db?.executeStatements(sql)
        
        if result! {
            print("        ")
        }else{
            print("        ")
        }
}


}

コントローラ呼び出しの結果を表示するには、次の手順に従います.
class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
   
        SQLiteTool.shareInstance.insertRecord()
        、、、
    }


}

2スレッドセキュリティ
class SQLiteTool : NSObject{
    static let shareInstance = SQLiteTool()
   
//      ,          ,    open  
    var dbQueue:FMDatabaseQueue = FMDatabaseQueue(path:"Users/huwenkuan/Desktop/db/demo.sqlite")

//    
func createTable() -> () {
        let sql = "create table if not exists t_stu(id integer primary key autoincrement,name text not null,age integer,score real default 60) "
    
        //  inDatabase            ,           
        dbQueue.inDatabase { (db:FMDatabase?) in

//            ,      
            let result = db?.executeUpdate(sql, withArgumentsIn: nil)
            // 
                    if result! {
                        print("yes")
                    }else{
                        print("no")
                    }
        }    
    }


//          
func executeStaments() -> () {
        let sql = "insert into t_stu(name,age,score) values('zhangsanfeng',21,83.0);insert into t_stu(name,age,score) values('wangermazi',22,68.0);insert into t_stu(name,age,score) values('lala',23,85.0);insert into t_stu(name,age,score) values('lili',25,38.0)"
        
        
//              
        dbQueue.inDatabase { (db:FMDatabase?) in
            let result = db?.executeStatements(sql)
            //
                    if result! {
                        print("        ")
                    }else{
                        print("        ")
                    }
        }
        
    }

//     
func transaction() -> () {
        let sql0 = "insert into t_stu(name,age,score) values('haha',8,20.0)"
        let sql1 = "insert into t_stu(name,age,score) values('da',9,21.0)"
        
        dbQueue.inTransaction { (db:FMDatabase?, rollback) in
            let result0 = db?.executeUpdate(sql0, withArgumentsIn: nil)
            let result1 = db?.executeUpdate(sql1, withArgumentsIn: nil)
            
            
            if result0! && result1! {
                print("      ")
            }else{
//                rollback?.memory = true
            }
        }
        
        
    }

}

コントローラで呼び出す
class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        
        SQLiteTool.shareInstance.transaction()
        
        
        
    }


}