java - 如何忽略 SQL 更新中的列

标签 java mysql sql model prepared-statement

我有一个程序,它会检查用户模型,并将值添加到准备好的更新语句(如果它们不为空),如下所示

    PreparedStatement pst = conn.prepareStatement("UPDATE users SET name=?,email=?,pwd=?,avatar=?,sts=?,bio=?,country=? WHERE uuid=?");
    if(this.name != null) pst.setString(1, this.name);
    if(this.email != null) pst.setString(2, this.email);
    if(this.password != null) pst.setString(3, this.password);
    if(this.avatar != null) pst.setString(4, this.avatar);
    if(this.status != null) pst.setString(5, this.status);
    if(this.bio != null) pst.setString(6, this.bio);
    if(this.country != null) pst.setString(7, this.country);
    pst.setString(6, this.id);

我面临的问题是准备好的语句中不能有未定义的字段。我可以将不想更改的字段设置为等于什么?

最佳答案

添加参数,即使使用 NULL 值。然后将更新更改为:

UPDATE users
    SET name = coalesce(?, name),
       email = coalesce(?, email),
       . . .
   WHERE uuid = ?;

关于java - 如何忽略 SQL 更新中的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52538713/

相关文章:

Java 事后调试?

java - 实例化接口(interface)时如何实现自己的方法?

mySQL检索按顺序重复一个值的记录

javascript - 保存使用casperjs抓取网页时获得的表数据

Mysql 抛出一个错误

java - cron 表达式在当前日期时间执行一次

java - 方法在简单的 JFrame 中返回 null

mysql - 如何将一个表中的一条记录拆分为另一个表的两条记录

sql - 如何限制 SQL Server 接受空字符串

sql - 依靠多个 bool 列