目次
第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;