在数据库里有一个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 了?原因就在这里啊。你看看我上面附的代码。谢谢你这么耐心。