jdbcTemplate获取mysql的blob

java使用jdbcTemplate操作mysql数据库,遇到blob字段,正常读取出来是blob的地址,而不是blob的内容。

下面采用2中方式读取blob的内容:

1、以二进制数组形式读取blob,适用于文本数据

public void testJdbc()
	{
		ApplicationContext ctx = new ClassPathXmlApplicationContext("restlet-servlet.xml");
		JdbcTemplate jdbcTemplate = (JdbcTemplate)ctx.getBean("jdbcTemplate");
		String sql = "select * from violation_redis t where t.id < 10";
		final LobHandler lobHandler=new DefaultLobHandler();  
		@SuppressWarnings("unchecked")
		List<Map<String,String>> list = jdbcTemplate.query(sql,new RowMapper(){
			public Object mapRow(ResultSet rs, int rowNum) throws SQLException 
			{
				//以二进制的数组方式获得Blob数据,第二个参数3是指blob字段在结果集的位置
				byte[] attach = lobHandler.getBlobAsBytes(rs, 3);
				//非blob子弹获取
				String key = rs.getString("vio_key");
				String strAttach = new String(attach);
				p(key + "==" + strAttach);
				Map<String,String> map = new HashMap<String,String>();
				map.put("vio_key", key);
				map.put("vio_info", strAttach);
				return map;
			}
		});
		p(list);
	}

2、流模式读取blob:

public void getBlob(OutputStream  out)
{
		String sql = "select * from violation_redis t where t.id < 10";
		final LobHandler lobHandler=new DefaultLobHandler();  
		List<Map<String,String>> list = jdbcTemplate.query(sql,new RowMapper(){
			public Object mapRow(ResultSet rs, int rowNum) throws SQLException 
			{
				//以二进制的数组方式获得Blob数据
				InputStream is = lobHandler.getBlobAsBinaryStream(rs, 2);
				if(is != null){
				//利用spring的工具类将输入流的数据复制到输出流中
				FileCopyUtils.copy(is, out);
			}
		});
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值