使用 JDBC 對oracle的raw數據類型進行操作(CRUD)時,
會發現獲取到oracle 的 raw類型 對應 java的 byte[],據我所知 oracle raw數據類型保存的爲16進制數。
獲取oracle raw數據類型 的 字段 的值 有三種方式:
第一種:
使用orm框架: hibernate,
寫一個映射類與數據表的相關字段進行映射,數據表的raw類型對應着java映射類的 UUID 類型。
第二種:
使用 java.lang.Integer.toHexString(int) 方法獲取 raw類型的值,代碼:
/**
* 將 oracle raw 類型轉爲 十六進制字符串
* @param obj
* @return
*/
public String toHexStringAboutRaw(Object obj) {
if (!(obj instanceof byte[])) {
return "";
}
byte[] bytes = (byte[]) obj;
// System.out.println("bytes.length=" + bytes.length);//16
StringBuffer raw = new StringBuffer();
String hex = "";
for (int i = 0; i < bytes.length; i++) {
hex = Integer.toHexString(bytes[i] & 0xFF);
if (hex.length() == 1) {
hex = '0' + hex;
}
raw.append(hex.toUpperCase());
}
return raw.toString();
}
第三種:
自定義方法解析 raw類型:
/**
* 將 oracle raw 類型轉爲 十六進制字符串
* @param obj
* @return
*/
public String bytesToHexStringAboutRaw(Object obj) {
if (!(obj instanceof byte[])) {
return "";
}
byte[] bytes = (byte[]) obj;
// System.out.println("bytes.length=" + bytes.length);//16
StringBuffer raw = new StringBuffer();
for (int i = 0; i < bytes.length; i++) {
raw.append(decToHex(bytes[i]));
}
return raw.toString();
}
public String decToHex(int dec) {
StringBuilder hexdecimalNumber = new StringBuilder();
int length = 8;
int[] arrayNumber = new int[length];
for (int i = 0; i < length; i++) {
// 有符號左移 i*4 位, 再無符號右移 i*4 位, 之後即可得到一個新的十進制數.
// 0xF: 0000 0000 0000 0000 0000 0000 0000 1111 (十進制數 15 的二進制數, 其十六進制數爲 F).
// 位運算符 & 上下對位, 只有上下都是 1, 才取 1.
arrayNumber[i] = (dec & (0xF << i * 4)) >>> i * 4;
}
// for(int i = length - 1; i >= 0; i--){
for (int i = 1; i >= 0; i--) {
switch (arrayNumber[i]) {
case 0:
hexdecimalNumber.append("0");
break;
case 10:
hexdecimalNumber.append("A");
break;
case 11:
hexdecimalNumber.append("B");
break;
case 12:
hexdecimalNumber.append("C");
break;
case 13:
hexdecimalNumber.append("D");
break;
case 14:
hexdecimalNumber.append("E");
break;
case 15:
hexdecimalNumber.append("F");
break;
default:
hexdecimalNumber.append(Integer.toString(arrayNumber[i]));
}
}
// System.out.println("hexdecimalNumber.toString()=" + hexdecimalNumber.toString());
return hexdecimalNumber.toString();
}