美文网首页
WCDB.Swift使用记录

WCDB.Swift使用记录

作者: 133sheiya | 来源:发表于2021-09-09 10:37 被阅读0次

1.官网WCDB.Swift

创建出model实现TableCodable协议
如下:

class VolumeUserModel:TableCodable
{
    var identifier = 0
    var BASICTON_QAN: Int = 0
    var BASICTON_TAG: String = ""
    var BZ: String = ""
    var CAL_STATUS: String = ""
    var CB_SL: Int = 0
    var CBNUMBER: Int = 0
    var CBZTS: String = ""
    var COUNT_QAN: String = ""
    var FREEPULL_TAG: String = ""
    var IS_CALC: String = ""
    var METERC_CALIBRE: Int = 0
    var QFJE: Int = 0
    var SCZT: Int = 0
   ...
    static var tableName: String  { "VolumeUserModel" }

    var lastInsertedRowID: Int64 = 0
    var isAutoIncrement: Bool = true
//    typealias Properties = CodingKeys
    
    enum CodingKeys: String,CodingTableKey {
        typealias Root = VolumeUserModel
        static let objectRelationalMapping = TableBinding(CodingKeys.self)
        case identifier
        case BASICTON_QAN
        case BASICTON_TAG
        case BZ
        case CAL_STATUS
        case CB_SL
        case CBNUMBER
       ...
      
        static var columnConstraintBindings: [VolumeUserModel.CodingKeys : ColumnConstraintBinding]? {
            return [
                identifier:ColumnConstraintBinding(isPrimary:true)
            ]
        }
    }

}

这里要注意下 enum CodingKeys里面出现的所有case 必须在类上有对应的属性 否则会报错,
'VolumeUserModel' does not conform to protocol 'Decodable'
'VolumeUserModel' does not conform to protocol 'Encodable'

如图:


image.png

千万注意

  1. CodingKeys 中所有case 均会在表中创建出对应的字段。如果不想创建。就不要在case中加某个字段
    4.计算Count 如下 cCount即为满足条件的长度
 let whereSql1 = (VolumeUserModel.Properties.VOLUME_NO == obj.VOLUME_NO) && (VolumeUserModel.Properties.SCZT == 1)
            let whereSql2 = (VolumeUserModel.Properties.VOLUME_NO == obj.VOLUME_NO) && (VolumeUserModel.Properties.CBZTS == "已抄")
            
            let cCount =   try? WCDBDataBaseManager.defaultDatabase.getValue(on: VolumeUserModel.Properties.identifier.count(), fromTable: VolumeUserModel.tableName, where: whereSql1, orderBy: nil, limit: nil, offset: nil).int32Value

5.附上条件查询page, size,condition的代码吧。懒得写了, 简单的记录下,这运算符重载被他玩的贼6.真佩服tx团队。

 func queryVolumeUserList(searchModel:IVUserSearchModel) -> [[String:Any]] {
        
        let userId = SimpleOperation.getRecordUserData()?.USER_ID ?? ""
        var whereSql =  (VolumeUserModel.Properties.USER_ID == userId)
        if !searchModel.volumeNo.isEmpty {
            whereSql = whereSql && (VolumeUserModel.Properties.VOLUME_NO == searchModel.volumeNo)
        }
        if !searchModel.userbKh.isEmpty {
            whereSql = whereSql && (VolumeUserModel.Properties.USERB_KH.like("%\(searchModel.userbKh)%"))
        }
        if !searchModel.userbSbbk.isEmpty {
            whereSql = whereSql && (VolumeUserModel.Properties.USERB_SBBK == searchModel.userbSbbk)
        }
        
        if !searchModel.cbzts.isEmpty {
            whereSql = whereSql && (VolumeUserModel.Properties.CBZTS == searchModel.cbzts)
        }
        if searchModel.sczt != -1 {
            whereSql = whereSql && (VolumeUserModel.Properties.SCZT == searchModel.sczt)
        }
       
        let orderByUserbJbh = [VolumeUserModel.Properties.USERB_JBH.asOrder(by: .ascending)]
        let models:[VolumeUserModel] = WCDBDataBaseManager.shared.qureyObjectsFromDb(fromTable: VolumeUserModel.tableName, where: whereSql, orderBy:orderByUserbJbh , limit: searchModel.size, offset: searchModel.page * searchModel.size) ?? []
        
        var arr:[[String:Any]] = []
        for obj in models {
            
            let dic = SimpleOperation.jsonObj(model: obj)
//            uLog(dic)
            arr.append(dic)
        }
        return arr
        
    }

相关文章

网友评论

      本文标题:WCDB.Swift使用记录

      本文链接:https://www.haomeiwen.com/subject/gfjiwltx.html