java - 在 Java 中执行 SQL 批量更新,如果传入的 parm 为 null,则不会更新字段

标签 java sql oracle batch-file prepared-statement

如果传入的参数值为空,如何创建不会更新列的批量更新?例如:

String UPDATE_STMT = "UPDATE MY_TABLE SET col1 = ?, col2 = ?, col3 = ?";
Connection conn = getConnection();
PreparedStatement pstmt = conn.preparedStatement(UPDATE_STMT);

List items = getItems();
for (ItemType item : items) {

    stmt.setString(1, item.x);
    stmt.setString(2, item.y);
    stmt.setString(3, item.z);
}

pstmt.executeBatch();

如何对其进行编码,以便在 item.x 不为 null 或为空的情况下,仅使用 item.x 的值更新 col1?如果 item.x 为 null/空,我不希望覆盖 col1 字段中的当前值。这是针对 Oracle 10g 数据库的。

最佳答案

我想它应该适合你:

String UPDATE_STMT = "UPDATE MY_TABLE SET col1 =   
CASE WHEN ? IS NULL THEN col1 ELSE ? END, col2 = ?, col3 = ?";

注意,现在需要设置 item.x 两次,stmt.setString(1, item.x); stmt.setString(2, item.x);

关于java - 在 Java 中执行 SQL 批量更新,如果传入的 parm 为 null,则不会更新字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12463359/

相关文章:

java - AEM-视觉 : data-sly-attribute erasing css on tag

java - 计算多元正态分布的概率

SQL Oracle 继承关系数据库

java - 从 PL/SQL 调用 Java 加密体系结构 (JCA)

database - named user plus,这是什么?

java - Vaadin 将图像转换并显示为 PDF

java - java中测试文件 worker 的问题

mysql - 表 'session_variables' 的命令被拒绝

c# - 试图从 sql 表中删除值中的空格

MySQL 如何从两个表中选择数据,以便第二个表中的行覆盖第一个表中的行?