codejavamao
中国式茂哥
2009-04-15 16:50
浏览 224

使用hibernate把sqlserver中image类型的数据读出来

在数据库里有一个image类型的数据,通常可以使用 ResultSet    rs    =    ps.executeQuery();  
                     rs.next();  
                     InputStream    in    =    rs.getBinaryStream("filecontent");  
读到这个二进制的数据,现在使用的是hibernate,一条查询语句返回的是一个对象,使用hibernate reverse后image类型的变成了String类型,该如何操作才能正确读到数据库中的二进制数据?

 

也就是hibernate中有没有什么方法代替ResultSet的getBinaryStream();


问题补充:
第一个的回答,我试过了有[Microsoft][SQLServer 2000 Driver for JDBC]Unsupported data conversion异常。
如果用byte[] 映射,那映射文件里属性的type 是不是java.lang.Byte?
第二个的回答,我试过了生成的图片>2G.

问题补充:
huangnetian说的“把那个image类型的字段配置到hibernate中,配成byte与之对应
”有nsupported data conversion.异常。


lovewhzlq说的改成binary虽然无异常,但是生成的图片依然很大。
生成图片到磁盘的代码如下:

byte[] b = vsheetinfoviewobj.getCoverImage();
String path = "";
//如果有图片
if (null != b) {
//System.out.println(b);
try {
path = "d:/new1.jpg";
FileOutputStream out = new FileOutputStream(path);
int len = b.length;
while (len != -1) {
out.write(b, 0, len);
out.flush();
}
out.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
o[0] = vsheetinfoviewobj;
o[1] = path;
}
else{
o[0]=vsheetinfoviewobj;
o[1]=null;
}

恳请高手再指教。
问题补充:
图片不是很大(绝对不是>2G),读取图片是hibernate做的,读到byte[]中了。然后把byte[]中写到磁盘上了。这个思路对不对?

问题补充:
byte[]的length:2359350;
问题补充:
byte[]的length:2359350; 但是生成的图片>2G.这是什么原因?可以看到图片了。就是图片>2G啊。
问题补充:
大哥,现在生成的图片更大了4G了。为什么2M的图片我写到磁盘上就变成4G 了?原因就在这里啊。你看看我上面附的代码。谢谢你这么耐心。
  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

相关推荐