private int[] update(DSLContext tx, Connection conn, List<HostItem> hosts) throws SQLException { Field<Integer> currentStatusWeight = decodeStatus(choose(ANSIBLE_HOSTS.STATUS)); Field<Integer> newStatusWeight = decodeStatus(choose(value((String) null))); String update = tx.update(ANSIBLE_HOSTS) .set(ANSIBLE_HOSTS.DURATION, ANSIBLE_HOSTS.DURATION.plus(value((Integer) null))) .set(ANSIBLE_HOSTS.STATUS, when(currentStatusWeight.greaterThan(newStatusWeight), ANSIBLE_HOSTS.STATUS).otherwise(value((String) null))) .set(ANSIBLE_HOSTS.EVENT_SEQ, when(currentStatusWeight.greaterThan(newStatusWeight), ANSIBLE_HOSTS.EVENT_SEQ).otherwise(value((Long) null))) .where(ANSIBLE_HOSTS.INSTANCE_ID.eq(value((UUID) null)) .and(ANSIBLE_HOSTS.INSTANCE_CREATED_AT.eq(value((Timestamp) null)) .and(ANSIBLE_HOSTS.HOST.eq(value((String) null)) .and(ANSIBLE_HOSTS.HOST_GROUP.eq(value((String) null)))))) .getSQL(); try (PreparedStatement ps = conn.prepareStatement(update)) { for (HostItem h : hosts) { ps.setLong(1, h.duration()); ps.setString(2, h.status()); ps.setString(3, h.status()); ps.setString(4, h.status()); ps.setLong(5, h.eventSeq()); ps.setObject(6, h.key().instanceId()); ps.setTimestamp(7, h.key().instanceCreatedAt()); ps.setString(8, h.key().host()); ps.setString(9, h.key().hostGroup()); ps.addBatch(); } return ps.executeBatch(); } }