swift簡易操做sqlite3

sqlite輕便小巧,底層採用C操做,跨平臺在Linux和Android以及iOS甚至是嵌入式都通用,今天咱們簡易進行一些swift操做sqlite……sql

開始以前咱們先簡易的看看一些sqlite操做swift

接下來咱們參看怎麼操做sqlite3bash

1 建立和打開dbapp

open class SKSQLiteDatabase {    public var handle : OpaquePointer?    var dbFilePath: String    var vFs: Int8 = 0    var flags:Int32    init(_ dbName: String, flags:Int32 = SQLITE_CREATE_TABLE | SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, extension ext: String = ".sqlite", vFs:   Int8 = 0) {        self.flags = flags        self.dbFilePath = dbHome + "/" + dbName + ext        self.vFs = vFs    }    open func openConnection()->Bool{       let ret = sqlite3_open_v2(self.dbFilePath, &handle, flags, &vFs)        return ret == SQLITE_OK    }}複製代碼

2 查詢column和對應的數據類型ui


    open func dbName()-> String{        lock.lock()        let db =  sqlite3_column_database_name(stmt, 0)        lock.unlock()        return String(cString: db!)    }    open func columnCount()->Int32{      return  sqlite3_column_count(stmt)    }    open func tableName()->String{        lock.lock()        let table = sqlite3_column_table_name(stmt, 0)        lock.unlock()        return String(cString: table!)    }    open func sqliteDataType( `for` index:Int32)->Int32{      return  sqlite3_column_type(stmt, index)    }複製代碼

    3 進行查詢(多列多行查詢)
    spa

    func execSql(_ query: String){        var tail:UnsafePointer<Int8>?        let ret =  sqlite3_prepare_v2(handle, query, -1, &stmt, &tail)                var next:Bool = true        var rowSet = [SKSQLiteRow]()        while next {            let row = SKSQLiteRow()            for index in 0 ..< columnCount() {                                 let table = sqlite3_column_table_name(stmt, index)                let column = sqlite3_column_name(stmt, index)             let  dataType =   sqliteDataType(for: index)                var value: Optional<SKSQLiteDataType> = NSNull()                switch dataType {                case SQLITE_INTEGER:                  value =  sqlite3_column_int(stmt, index)                case SQLITE_TEXT:                    let tValue : UnsafePointer<UInt8> =  sqlite3_column_text(stmt, index)                    value = String(cString: tValue)                case SQLITE_BLOB:                    let tValue = sqlite3_column_blob(stmt, index)                    let pointer = tValue?.assumingMemoryBound(to: Int8.self)                    value = String(cString: pointer!)                default:                    ""                }                let data = SKSQLiteColumnData.init(table: toStr(p: table!) , columnName: toStr(p: column!), dataType: dataType, value: value)                row.add(data)            }            rowSet.append(row)            next = sqlite3_step(stmt) == SQLITE_OK        }    }複製代碼


    4 表中對應的每列數據信息3d


      class SKSQLiteColumnData{    var table: String    var columnName: String    var dataType: Int32    var value: Optional<SKSQLiteDataType>    init(table:String, columnName: String, dataType:Int32, value:Optional<SKSQLiteDataType>){        self.table = table        self.columnName = columnName        self.dataType = dataType        self.value = value    }}複製代碼

      5 對數據按行處理code


        class SKSQLiteRow : IteratorProtocol{    typealias Element = SKSQLiteColumnData        var rows:[SKSQLiteColumnData] = [SKSQLiteColumnData]()    init(_ rows:[SKSQLiteColumnData] = [SKSQLiteColumnData]()) {        self.rows = rows    }    func add(_ data:SKSQLiteColumnData){        rows.append(data)    }    func next() -> SKSQLiteColumnData? {        return rows.removeFirst()    }}複製代碼

        6 對sqlite的數據類型進行統一整理cdn


          protocol SKSQLiteDataType {}extension Int32: SKSQLiteDataType{}extension String: SKSQLiteDataType{}extension NSNull: SKSQLiteDataType{}
          
          複製代碼
          相關文章
          相關標籤/搜索