OracleClobタイプとBlobタイプ間の変換

目次

1.背景

第二に、ClobとBlobの違い

3つ目は、JDKのBase64エンコーディングを使用する

第4に、Oracle独自のBase64エンコーディングを使用します

 


1.背景

最近、データを移行するときに、ClobタイプをBlobに変換する問題が発生しました。履歴データでは、ファイルのコンテンツはClobタイプに格納され、新しいテーブルはBlobタイプを使用するため、次のことが必要になります。ファイルを移行するときにタイプを変換します。

第二に、ClobとBlobの違い

BLOBとCLOBはどちらもラージフィールドタイプであり、BLOBはバイナリで格納され、CLOBはテキストを直接格納できます。2つは互いに交換することができます。通常、BLOBフィールドを使用して画像、ファイル、音楽などの情報を格納し、CLOBを使用して記事や長いテキストを格納します。これは、将来のクエリ、更新、ストレージ、およびその他の操作に便利です。

3つ目は、JDKのBase64エンコーディングを使用する

JDK1.8より前は、base64のエンコードとデコードでsun.misc.BASE64Decoderとsun.misc.BASE64Encoderが使用されていましたが、JDK1.8以降では、java.util.Base64.Decoderとjava.util.Base64.Encoderがの元のバージョンに置き換わりました。コードは次のように実装されています。

package com.lzw.demo;

import java.util.Base64;

public class ClobToBlob {

	public static void main(String[] args) {
		
		AttachmentBlob attachmentBlob = new AttachmentBlob();
		AttachmentClob attachmentClob = new AttachmentClob();
		//Clob 转 Blob
		byte[] decode = Base64.getMimeDecoder().decode(attachmentClob.getContent());
		attachmentBlob.setData(decode);
		attachmentBlob.setId(attachmentClob.getId());
		//Blob 转 Clob
		String content = Base64.getMimeEncoder().encodeToString(attachmentBlob.getData());
		attachmentClob.setContent(content);
	}
}

class AttachmentClob{
	private String id;
	private String content;
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getContent() {
		return content;
	}
	public void setContent(String content) {
		this.content = content;
	}
	
}

class AttachmentBlob{
	private String id;
	private byte[] data;
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public byte[] getData() {
		return data;
	}
	public void setData(byte[] data) {
		this.data = data;
	}
}

第4に、Oracle独自のBase64エンコーディングを使用します

 1.base64の暗号化機能

select utl_raw.cast_to_varchar2(utl_encode.base64_encode(utl_raw.cast_to_raw('abcdef'))) from dual;

/ 2、base64復号化機能

select utl_raw.cast_to_varchar2(utl_encode.base64_decode(utl_raw.cast_to_raw('YWJjZGVm'))) from dual;

 

 

おすすめ

転載: blog.csdn.net/weixin_42228950/article/details/103741964