java读取SQL SERVERjava image 生成pdf类型,生成的图片不能打开

心宽天地广
被人忽视的sqlserver数据类型--image
  SqlServer中有一种数据类型是Image,用来存储图片大小不超过2g的图片,将图片转换为二进制!缺点是占用了很大的数据存储空间。但是现对于之前的存储物理路径来说读取图片和存储图片方便了很多。
  那么图片在MVC程序中是如何存入数据库,并从数据库显示到页面上的呢:
  下面是一个简单的小例子:
private string sqlconn = "Data Source=;Initial Catalog=IPersist Security Info=TUser ID=Password=123456";
// GET: /UpDownload/
public ActionResult Index()
return View();
[HttpPost]
[ValidateInput(false)]
public bool Upload(HttpPostedFileBase[] fileToUpload)
string path = "";
//TODDO:读取任何地方的路径
foreach (HttpPostedFileBase file in fileToUpload)
path = System.IO.Path.Combine(Server.MapPath("~/"), "uploadimage\\" + System.IO.Path.GetFileName("00" + file.FileName.Substring(file.FileName.LastIndexOf("."))));
//写入数据库
file.SaveAs(path);
//将需要存储的图片读取为数据流
FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read);
Byte[] imgbtye = new byte[fs.Length];
fs.Read(imgbtye, 0, Convert.ToInt32(fs.Length));
fs.Close();
using (SqlConnection conn = new SqlConnection(sqlconn))
conn.Open();
SqlCommand cmd = new SqlCommand();
cmd.Connection =
cmd.CommandText = "insert into T_TeacherImage(TeacherImage) values(@imgfile)";
SqlParameter par = new SqlParameter("@imgfile", SqlDbType.Image);
par.Value =
cmd.Parameters.Add(par);
cmd.ExecuteNonQuery();
#region 读取文件直接显示到视图上
public void Read()
byte[] MyData = new byte[0];
using (SqlConnection conn = new SqlConnection(sqlconn))
conn.Open();
SqlCommand cmd = new SqlCommand();
cmd.Connection =
cmd.CommandText = "select TeacherImage from T_TeacherImage where id='1'";
SqlDataReader sdr = cmd.ExecuteReader();
sdr.Read();
MyData = (byte[])sdr["TeacherImage"];
Response.ContentType = "image/gif";
Response.BinaryWrite(MyData);
conn.Close();
#endregion那么图片又是如何显示到网页上的呢,很简单:
if (xhr.readyState == 4 && xhr.status == 200) {
$('#personimg').attr("src", "http://localhost:55576/UpDownload/Read");
这个demo的实现环境是MVC,图片的获取路径是,当前服务主机地址/controller/action
怎么样,sqlserver为图片的读写,提供了很多方便之处吧!
没有更多推荐了,
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!拒绝访问 | www.wangchao.net.cn | 百度云加速
请打开cookies.
此网站 (www.wangchao.net.cn) 的管理员禁止了您的访问。原因是您的访问包含了非浏览器特征(42b5cb5c41184cfc-ua98).
重新安装浏览器,或使用别的浏览器求救!请问在SQL SERVER的image类型的字段中存储的图片如何读取出来,以前的方法好像不行了!
[问题点数:0分]
求救!请问在SQL SERVER的image类型的字段中存储的图片如何读取出来,以前的方法好像不行了!
[问题点数:0分]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
2002年5月 Web 开发大版内专家分月排行榜第一
2002年4月 Web 开发大版内专家分月排行榜第三
2003年7月 Web 开发大版内专家分月排行榜第三2002年1月 Web 开发大版内专家分月排行榜第三2001年11月 Web 开发大版内专家分月排行榜第三
匿名用户不能发表回复!|用java 怎样读写sql server 的 image 字段呢!!!~~~有例子么
[问题点数:100分,结帖人supers123]
用java 怎样读写sql server 的 image 字段呢!!!~~~有例子么
[问题点数:100分,结帖人supers123]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
匿名用户不能发表回复!|使用hibernate把sqlserver中image类型的数据读出来 - ITeye问答
在数据库里有一个image类型的数据,通常可以使用 ResultSet
ps.executeQuery();
rs.next();
InputStream
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);
path = "d:/new1.jpg";
FileOutputStream out = new FileOutputStream(path);
int len = b.
while (len != -1) {
out.write(b, 0, len);
out.flush();
out.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
恳请高手再指教。问题补充:图片不是很大(绝对不是&2G),读取图片是hibernate做的,读到byte[]中了。然后把byte[]中写到磁盘上了。这个思路对不对?
问题补充:byte[]的length:2359350;问题补充:byte[]的length:2359350; 但是生成的图片&2G.这是什么原因?可以看到图片了。就是图片&2G啊。问题补充:大哥,现在生成的图片更大了4G了。为什么2M的图片我写到磁盘上就变成4G 了?原因就在这里啊。你看看我上面附的代码。谢谢你这么耐心。
采纳的答案
int len = b.
while (len != -1) {//晕哦,这个当然一直都会运行,len总是不等于-1啊,同学
out.write(b, 0, len);
out.flush();
}
out.write(b);
out.flush();
2359350这是2Mb不是2Gb,同学
打印一下b.length,看这个图片的大小是多少
第一个问题:是你的图片本身是不是很大啊?
第二个问题:如果不是你的图片很大,那就是你代码里读取图片时写得有问题
??映射文件里属性的type设置为binary
但是那类的成员属性写成: 例如 :private byte[]
有问题再交流
别忘了给我加分噢,呵呵
我的意思是把那个image类型的字段配置到hibernate中,配成byte与之对应
那你这样,配置hibernate 映射文件时,就配成byte,不用String,这样查出来的直接是byte[]的,这样应该没问题了
你可以这样 String str=...; byte[] bs = str.getBytes();这样就可以了,然后你可以通过流把这个二进制数组写到一个文件里,这个像片就能显示了,不过后缀名一定要是jpg或bmp等图像后缀呀
你最好不要用String类型映射,可以用byte[]字节数组映射嘛,
或用Clob,Blob
已解决问题
未解决问题}

我要回帖

更多关于 java读取excel生成sql 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信