java spring 读取mysql blob_使用Spring JdbcTemplate实现CLOB和BLOB的存取

本文介绍了如何使用Spring的JdbcTemplate和LobHandler来实现MySQL中BLOB和CLOB类型的读写操作。详细展示了插入和查询过程,包括设置参数和提取大字段的实现方法。
摘要由CSDN通过智能技术生成

概述

本文讲述通过Spring的JdbcTemplate来读写数据库大字段的实现方案,在一位网友的一篇博客的基础上,查看api文档整理而成。

写实现

1 JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource); //reusable object

2 LobHandler lobHandler = new DefaultLobHandler(); //reusable object

3

4 jdbcTemplate.execute(5 "INSERT INTO imagedb (image_name, content, description) VALUES (?, ?, ?)",6 newAbstractLobCreatingPreparedStatementCallback(lobHandler) {7 protected void setValues(PreparedStatement ps, LobCreator lobCreator) throwsSQLException {8 ps.setString(1, name);9 lobCreator.setBlobAsBinaryStream(ps, 2, contentStream, contentLength);10 lobCreator.setClobAsString(ps, 3, description);11 }12 }13 );

类介绍

以下内容不求精准,加入了自己的理解和猜测,勿作学术用。

JdbcTemplate

负责翻译,向JDBC接口提供可执行的指令

AbstractLobCreatingPreparedStatementCallBack

负责提供参数设置的方法模板,并提供LobCreator实例

LobHandler

负责提供LobCreator - AbstractLobCreatingPreparedStatementCallBack借助于它来提供LobCreator

LobCreator

负责简化大字段的写入库

LobCreator API

LobCreator提供了多个接口来简化大字段的写入:对于BLOB,内容来源可以是InputStream、byte[];对于CLOB,内容来源可以是InputStream(自行确保都是ascii字符)、Reader、String。

9e8053166af90bb123728b8cb639e7dc.png

读实现

1 JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource); //reusable object

2 final LobHandler lobHandler = new DefaultLobHandler(); //reusable object

3

4 jdbcTemplate.query(5 "SELECT content FROM imagedb WHERE image_name=?", newObject[] {name},6 newAbstractLobStreamingResultSetExtractor() {7 public void streamData(ResultSet rs) throwsSQLException, IOException {8 FileCopyUtils.copy(lobHandler.getBlobAsBinaryStream(rs, 1), contentStream);9 }10 }11 );

批量读取

上述实现仅仅针对一条记录的读取,如果要读取多条记录,需要注意ResultSet实例已经指向了第一条记录(上述代码也没有调用rs.next()),可参考实现:

1 public List batchRead(String sql, finalString colNameFileName,2 finalString colNameFileContent) {3 JdbcTemplate jt =JdbcService.getInstance().getJdbcTemplate();4

5 final LobHandler lobHandler = newDefaultLobHandler();6 final List dfclList = new ArrayList();7 jt.query(sql, newAbstractLobStreamingResultSetExtractor() {8 protected void streamData(ResultSet rs) throwsSQLException,9 IOException, DataAccessException {10 do{ //SINOBEST 文件下载 ,此处的rs初始化时已经指向第一条记录

11 String name =rs.getString(colNameFileName);12 String content =lobHandler.getClobAsString(rs, colNameFileContent);13

14 DFCL cl = newDFCL(name, content);15 dfclList.add(cl);16 }while(rs.next());17 }18 });19 returndfclList;20 }

类介绍

以下内容不求精准,加入了自己的理解和猜测,勿作学术用。

JdbcTemplate

同上

AbstractLobStreamingResultSetExtractor

提供解析数据的方法模板,并提供ResultSet对象实例

LobHandler

简化大字段的读取

FileCopyUtils

spring提供的工具类,简化文件内容的传输

LobHandler API

LobHandler提供了多个接口来简化大字段的读入:对于BLOB,可以读为InputStream、byte[];对于CLOB,可以读为InputStream、Reader、String。和LobCreator的写入简化是对应的。

960b44e60a0586ea38ac4928e1bb842e.png

FileCopyUtils API

be2d352992f9d3eec9aa1880eb28ca86.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值