有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在构造准备好的语句时如何处理可选列

我想利用准备好的语句插入/更新postgres db。 问题是,该表包含可为空的列,我在运行时可能有值,也可能没有值
如果没有要插入/更新的内容,则需要保留旧值
有没有一种语法可以用于这种情况
在这种情况下,最好的做法是什么?这似乎是一个非常常见的问题

附言 我将java/scala与普通jdbc结合使用


共 (1) 个答案

  1. # 1 楼答案

    当然,你可以只构造一个没有你不想更新的列的语句

    如果这不是用例中的一个选项,那么您可以构造一个带有“标志”的case表达式,以指示是否应该绑定该列

    例如:

    String sql = "UPDATE mytable " +
                 "SET " +
                 "col1 = CASE(? WHEN 1 THEN ? ELSE col1 END), " +
                 "col2 = CASE(? WHEN 1 THEN ? ELSE col2 END) " +
                 "WHERE id = ?";
    
    PreparedStatement ps = con.prepareStatement(sql);
    
    // col1 should be updated
    ps.setInt(1, 1);
    ps.setString(2, newValueCol1);
    
    // col2 should not be updated
    ps.setInt(3, 0);
    ps.setString(4, null); // or any other value...
    
    // bind the where clause
    ps.setInt(5, someId);
    
    ps.executeUpdate();
    
    // close resources and clean up, omitted for brevity's sake