swift定义iOS数据库框架5——修改数据和删除数据(改)

这篇博客详细介绍了在Swift中如何修改iOS数据库的数据,包括更新所有数据、条件更新和内容替换。对于更新数据,强调了更新SQL语句的使用以及条件过滤的方法。在删除数据部分,讲解了删除所有数据和基于条件删除的实现。同时,提到了在处理Bool类型和条件运算符时的注意事项,以及替换操作对String字段的限制。
摘要由CSDN通过智能技术生成

修改数据

1、更新所有

在这里插入图片描述
跟新操作

	let update = users.update(email <- "dream@qq.com", phone <- "88888888")
    print(update.asSQL())
    try! db.run(update)

更新SQL即更新所有

public struct Update : ExpressionType {
    
    public var template: String
    public var bindings: [Binding?]
    
    public init(_ template: String, _ bindings: [Binding?]) {
        self.template = template
        self.bindings = bindings
    }
}

扩展 QueryType添加update方法

	public func update(_ values: Setter...) -> Update {
   
        return update(values)
    }
    
    public func update(_ values: [Setter]) -> Update {
   
        //SQL语句分段存储
        //第一个元素:Expression<Void>(literal: "UPDATE")->对应字符串->"update"
        //第二个元素:tableName()->对应表名称->"users"
        //第三个元素:Expression<Void>(literal: "SET")->对应->"set"
        //第四个元素:", ".join(values.map { " = ".join([$0.column, $0.value]) })->字段
        //例如:email = 'dream@qq.com', phone = '88888888'
        //第四个元素步骤->首先是拼接"="号,其次在拼接","号
        //形成完整SQL语句:update users set email = 'dream@qq.com', phone = '88888888'
        //注意:这么多的表达式,最终都会组装为一个表达式
        let clauses: [Expressible?] = [
            Expression<Void>(literal: "UPDATE"),
            tableName(),
            Expression<Void>(literal: "SET"),
            ", ".join(values.map {
    " = ".join([$0.column, $0.value]) }),
        ]
        //join拼接SQL语句相关
        //注意:每一个关键字之间需要" "空格隔开
        return Update(" ".join(clauses.compactMap {
    $0 }).expression)
    }

扩展Connection添加run方法,执行SQL语句

    @discardableResult public func run(_ query: Update) throws -> Int {
   
        //表达式
        //SQL->expression
        let expression = query.expression
        //队列->同步代码块
        return try sync {
   
            try self.run(expression.template, expression.bindings)
            //返回执行结果
            return self.changes
        }
    }

2、条件更新(where)

在这里插入图片描述

更新SQL,添加条件

	let filter = users.filter(name == "hello")
	try! db.run(filter.update(email <- "dream@qq.com"))

扩展 QueryType添加条件方法filter

    public func filter(_ predicate: Expression<Bool>) -> Self {
   
        return filter(Expression<Bool?>(predicate))
    }
    //SQL子句(排序->order by,分组->group...)
    public func filter(_ predicate: 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

群野

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值