我需要获取BLOB内容并将其存储在某个位置(假设它是文件)。 BLOB内容可能很大,因此我想使用流来执行此操作。在MyBatis 'Configuration XML' page上有可用类型处理程序的列表。我发现有BlobInputStreamTypeHandler,它应该允许我获取InputStream,而这正是我所需要的。因此,我为xml配置中的查询指定了resultType="java.io.InputStream"
。但是,当我尝试从InputStream读取“从DB读取”方法执行后得到的数据时,得到了java.io.IOException: Closed Connection
。我试图弄清楚,发现该类org.apache.ibatis.executor.resultset.DefaultResultSetHandler
is closing resultSet使得流不可读。
当我尝试使用ClobReaderTypeHandler从CLOB获取Reader时,我遇到了同样的异常。
我正在使用mybatis版本3.5.4。
如何从CLOB或BLOB列获取Reader / InputStream?这是错误还是我做错了?
@Select("select bindata from users where id = #{id}")
InputStream selectBlob(Integer id);
获取和读取输入流的代码看起来像这样。
try (SqlSession sqlSession = sqlSessionFactory.openSession()) {
Mapper mapper = sqlSession.getMapper(Mapper.class);
try (InputStream inputStream = mapper.selectBlob(1)) {
byte[] buffer = new byte[1024];
int read;
while((read = inputStream.read(buffer)) > -1) {
// use the read data
}
}
}