mybatis OracleのBlobフィールドを取得してBase 64エンコーディングに変換

2345 ワード

他のOracleデータベースのBlob取得方法を参考にして、何度も試しても成功しなかったので、自分で2時間も磨いて、ここで記録して、後で調べるようにしました!
ここで使用するSpringBootが構築したmaven環境は、springbootのパッケージを導入するだけでよく、データベースにはBlobのフィールドがあるテストテーブルを作成する必要があります.ここで私が構築したテーブルはtestテーブルと呼ばれ、中にはblobフィールドがZPと呼ばれています.
1.テストMapperファイルの作成
ここで返される値はMapタイプです.つまり、クエリーのBlobフィールドがObjectタイプに挿入されます.
@Mapper
public interface TestMapper {
	@Select("select zp from test")
	public List> getList();
}

2.テストサービスインタフェースファイルと実装ファイルの作成
@Repository
public interface TestService {
	public List> getList();
}
@Repository
public class TestServiceImpl implements TestService {
	@Autowired
	TestMapper testMapper;
	public List> getList() {
		return testMapper.getList();
	}
}

3.blob転送byte[]、Blob転送ファイル、Blob転送base 64符号化
  /**
	 *     
	 * @param args
	 * @throws Exception
	 */
	public static void main(String[] args) throws Exception {
	   SpringApplication.run(Application.class, args);
	   List>  list = SpringUtils.getBean(TestService.class).getList();
	   for (Map map : list) {
		   BLOB blob = (BLOB)map.get("ZP");  
		   System.out.println(blobToBase64(blob));
		   blobToPic(blob);
	   }
	}
	
	
	/**
	 * blob base64
	 * @param blob
	 * @throws Exception
	 */
	public static String blobToBase64(Blob blob) throws Exception{
		return Base64.encodeBase64String(blobToByte(blob));
	}
	
	/**
	 * blob pic
	 * @param blob
	 * @throws Exception
	 */
	public static void blobToPic(Blob blob) throws Exception{
		byte[] bt = blobToByte(blob);
		FileImageOutputStream imageOutput = new FileImageOutputStream(new File("F:/a.png"));
	    imageOutput.write(bt, 0, bt.length);
	    imageOutput.close();
	}
	
	/**
	 * blob byte
	 * @param blob
	 * @throws Exception
	 */
	public static byte[] blobToByte(Blob blob) throws Exception{
		InputStream is = (InputStream) blob .getBinaryStream();  
	    byte[] bs = new byte[1000];
	    int len = -1;
	    ByteArrayOutputStream os = new ByteArrayOutputStream(); 
	    while((len=is.read(bs)) != -1){
		   os.write(bs, 0, len);
	    }
	    byte[] bt = os.toByteArray();
	    os.close();
	    is.close();
	    return bt;
	}