獲取oracle raw數據類型 的字段 的值

使用 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();
	}

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章