使用Java中的jdbcTemplate获取Oracle db中的原始值

时间:2018-08-09 17:01:13

标签: java oracle spring-boot jdbctemplate

我正在使用spring boot和NamedParameterJdbcTemplate来查询Oracle数据库。没有波多黎各人波哥大,拉斯塔布拉斯山脉,迪纳米卡门特和拉斯塔纳斯,没有儿子辛普雷斯·拉斯·马斯玛。.

TABLE_A example:
id -> RAW(16)
name -> String
price -> 12.23

用于检索数据的代码为:

List<Map<Sting, Object>> result = jdbcTemplate.queryForList("SELECT * FROM TABLE_A WHERE id = ?", id);

问题出在id Raw列上。 result.get(0).get("id")给了我一个字节[],我无法对其进行解码或将其转换为适当的字符串,例如“ C195DF876C1E4014AF040D1566F5791C”。

new String(result.get(0).get("id")) not work.
new String(result.get(0).get("id"), "UTF-8") not work.

一些想法?

2 个答案:

答案 0 :(得分:0)

如果您希望从16个字节中提取32个字符(C195DF876C1E4014AF040D1566F5791C),则很可能需要十六进制编码的String

StringBuilder sb = new StringBuilder();
byte[] id = { 0x1F, 2, 0x2C, 4};
for (byte b : id) {
  String hex = Integer.toHexString(Byte.toUnsignedInt(b)).toUpperCase();
  sb.append(((hex.length() == 2) ? hex : "0" + hex));
}
System.out.println(sb.toString()); // 1F022C04

答案 1 :(得分:0)

您可以使用https://docs.oracle.com/javase/8/docs/api/javax/xml/bind/DatatypeConverter.html#printHexBinary-byte:A-将字节数组转换为您要使用的十六进制表示形式。