Spring 資料庫處理Clob/Blob大物件
阿新 • • 發佈:2019-01-06
概述
使用Spring的時候需求上難免說需要儲存一下幾種型別:
- 文字
- 圖片
- 二進位制
處理物件
Spring 支援通過LobCreator/LobHandler
進行處理大物件
- BLOB
- byte[] — getBlobAsBytes and setBlobAsBytes
- InputStream — getBlobAsBinaryStream and setBlobAsBinaryStream
- CLOB
- String — getClobAsString and setClobAsString
- InputStream — getClobAsAsciiStream and setClobAsAsciiStream
- Reader — getClobAsCharacterStream and setClobAsCharacterStream
入口
看到方法名就知道,在呼叫前會被執行一遍,剛好看看這個物件的實現,只有
AbstractLobCreatingPreparedStatementCallback
,接下來看看原始碼,看看有沒有例子。
就是我想要的
使用例子
final File blobIn = new File("spring2004.jpg");
final InputStream blobIs = new FileInputStream(blobIn);
final File clobIn = new File("large.txt");
final InputStream clobIs = new FileInputStream(clobIn);
final InputStreamReader clobReader = new InputStreamReader(clobIs);
jdbcTemplate.execute(
"INSERT INTO lob_table (id, a_clob, a_blob) VALUES (?, ?, ?)",
//new DefaultLobHandler() or new OracleLobHandler()
new AbstractLobCreatingPreparedStatementCallback(lobHandler) {
protected void setValues(PreparedStatement ps, LobCreator lobCreator) throws SQLException {
ps.setLong(1, 1L);
lobCreator.setClobAsCharacterStream(ps, 2, clobReader, (int)clobIn.length());
lobCreator.setBlobAsBinaryStream(ps, 3, blobIs, (int)blobIn.length());
}
}
);
blobIs.close();
clobReader.close();
執行步驟:
- 獲取 lobHandler 可以是 DefaultLobHandler
- 使用方法 setClobAsCharacterStream 設定CLOB內容
- 使用方法 setBlobAsBinaryStream 設定BLOB內容
其他方法
setBlobAsBinaryStream
setClobAsAsciiStream
setClobAsCharacterStream