【发布时间】:2016-08-31 20:54:45
【问题描述】:
我正在尝试使用 RAW(255) 的 id 更新我的 oracle DB 中的某些行。 示例 ID 0BF3957A016E4EBCB68809E6C2EA8B80、1199B9F29F0A46F486C052669854C2F8...
@Autowired
private NamedParameterJdbcTemplate jdbcTempalte;
private static final String UPDATE_SUB_STATUS = "update SUBSCRIPTIONS set status = :status, modified_date = systimestamp where id in (:ids)";
public void saveSubscriptionsStatus(List<String> ids, String status) {
MapSqlParameterSource paramSource = new MapSqlParameterSource();
List<String> idsHexToRaw = new ArrayList<>();
String temp = new String();
for (String id : ids) {
temp = "hextoraw('" + id + "')";
idsHexToRaw.add(temp);
}
paramSource.addValue("ids", idsHexToRaw);
paramSource.addValue("status", status);
jdbcTempalte.update(*UPDATE_SUB_STATUS*, paramSource);
}
上面的代码块正在执行,没有任何错误,但更新不会反映到数据库中,而 如果我跳过使用 hextoraw() 并只传递 id 列表,它可以正常工作并更新数据表。见下面代码
public void saveSubscriptionsStatus(List<String> ids, String status) {
MapSqlParameterSource paramSource = new MapSqlParameterSource();]
paramSource.addValue("ids", ids);
paramSource.addValue("status", status);
jdbcTempalte.update(UPDATE_SUB_STATUS, paramSource);
}
这段代码可以正常工作并更新表,但由于我没有使用 hextoraw(),它会扫描整个表以进行更新,因为我已经创建了索引。所以使用 hextoraw() 将使用索引来扫描表,但它不会更新值,这有点奇怪。
【问题讨论】:
-
下面的更新答案