1. 程式人生 > >Spring 資料庫處理Clob/Blob大物件

Spring 資料庫處理Clob/Blob大物件

概述

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

執行步驟:

    1. 獲取 lobHandler 可以是 DefaultLobHandler
    1. 使用方法 setClobAsCharacterStream 設定CLOB內容
    1. 使用方法 setBlobAsBinaryStream 設定BLOB內容

其他方法

setBlobAsBinaryStream setClobAsAsciiStream setClobAsCharacterStream