怎么用java将图片转换成二进制存放到sqlserver中,并读出进行显示???????

aweiliu 2006-03-05 02:21:24
请问:

怎么用java将图片转换成二进制存放到sqlserver中,并读出进行显示???????

各位高手请赐教阿。
急用阿。
...全文
816 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiangzhengyan 2006-03-09
  • 打赏
  • 举报
回复
图片一般不会保存在数据库中的,因为效率太低,用户每次访问网页都要从数据库中读图片.
如国是为了便于管理,不得不把图片放入数据库,一般都会写一个函数,让它定期的(或条件满足时)把图片从数据库中读出放在硬盘上特定目录中(如f:\test\test.jpg).用户访问时就不需从数据库中读图片<img src="f:\test\test.jpg"
xiangzhengyan 2006-03-09
  • 打赏
  • 举报
回复
方法1:专门写个函数把数据从数据库中读出,作为文件形(如test.jpg)式保存在硬盘上,然后在html中显示<img src="test.jpg"/
----------------------------------------------------------------------
方法2:写一个servlet
public class GetPhotoAction extends Action {
private static final String CONTENT_TYPE = "image/gif; charset=GBK";//输出类型为 图像
public ActionForward execute(ActionMapping actionMapping,
ActionForm actionForm,
HttpServletRequest request,
HttpServletResponse response) {
int empid;
try {
empid = Integer.parseInt(request.getParameter("empid"));//员工id
} catch (NumberFormatException e) {
empid = 0;
}
response.setContentType(CONTENT_TYPE); //设置输出类型
OutputStream out = null;
try {
out = response.getOutputStream();//得到输出流
} catch (IOException ex1) {
ex1.printStackTrace(System.out);
}
try {
byte[] photo = Operator.getDBPhoto(empid);//从数据库中读出文件
if (photo!=null && photo.length > 0) {
out.write(photo); //输出到网页上
}
} catch (Exception ex) {
ex.printStackTrace(System.out);
}
return null;
}
}
我是在struct中写的,如果你用的是jsp+servlet,把Action改成Servlet即可.
由于CONTENT_TYPE = "image/gif; charset=GBK",所以你直接在浏览器中访问这个servlet的话只能看到一张大的图片,就算写了out.write("aaaaaaaaa"),也不会看到字符输出,所以你只能在jsp中调用这个servlet
<img src="getPhotoAction.do?empid=123"alt="照片" width="185" height="218">
fire222 2006-03-06
  • 打赏
  • 举报
回复
关注中
kill8108 2006-03-06
  • 打赏
  • 举报
回复
PreparedStatement 是Statement的子类,只不过PreparedStatement 是预编绎的语句呀,速度在某种程况下会快一点吧!图片是一个文件,也可以使用流的形式来处理的!不过一般不会把图片直接放到数据库中!!
cjianwen 2006-03-06
  • 打赏
  • 举报
回复
俺只看到怎么读,怎么没看到具体显示的html代码,怎么显示呀?
mdsp25xhm 2006-03-06
  • 打赏
  • 举报
回复
学习
sunrisefe 2006-03-05
  • 打赏
  • 举报
回复
以二进制的形式插入到数据库中去. 与普通的数据插入不一样,这里用的是PreparedStatement 来执行插入语句,而不是用Statement.
xiangzhengyan 2006-03-05
  • 打赏
  • 举报
回复
也可用流

InputStream ins;//图片文件
int filesize//图片大小
pstmt.setBinaryStream(2,ins,filesize)
xiangzhengyan 2006-03-05
  • 打赏
  • 举报
回复
在哪显示,jsp还是窗体
xiangzhengyan 2006-03-05
  • 打赏
  • 举报
回复
byte[] photo;
先把图片像普通文件一样读入photo;

如果表有id(int)和img(image)两个字段
String sql = "insert into empinfo values(?,?);";//conn是Connection的对象
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setInt(1,99);
pstmt.setBytes(2,photo);
pstmt.executeUpdate
pstmt.close();
conn.close();
lydvqq 2006-03-05
  • 打赏
  • 举报
回复
建表:
CREATE TABLE [dbo].[emp] (
[name] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[pay] [money] NULL ,
[img] [image] NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
--test.htm--
<HTML>
<HEAD>
<TITLE>Image File </TITLE>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</HEAD>
<FORM METHOD=POST ACTION="testimage.jsp">
<INPUT TYPE="text" NAME="content"><BR>
<INPUT TYPE="file" NAME="image"><BR>
<INPUT TYPE="submit"></FORM>
<BODY>
</BODY>
</HTML>

--testimage.jsp--
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.sql.*" %>
<%@ page import="java.util.*"%>
<%@ page import="java.text.*"%>
<%@ page import="java.io.*"%>
<html>
<body>
<%
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
String url = "jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=test";
Connection conn = DriverManager.getConnection(url,"sa","sa");
System.out.println("diver is ok");

String content=request.getParameter("content");
String filename=request.getParameter("image");
FileInputStream img=new FileInputStream(filename);
String sql="insert into emp(name,pay,img) values('lyd',12,?)";
PreparedStatement pstmt=conn.prepareStatement(sql);
pstmt.setBinaryStream(1,img,img.available());
pstmt.execute();
out.println("Success,You Have Insert an Image Successfully");
%>
--show.jsp--
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.sql.*" %>
<%@ page import="java.util.*"%>
<%@ page import="java.text.*"%>
<%@ page import="java.io.*"%>
<html>
<body>
<%
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
String url = "jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=test";
Connection conn = DriverManager.getConnection(url,"sa","sa");
System.out.println("diver is ok");
String sql = "select img from emp ";
Statement stmt=null;
ResultSet rs=null;
try{
stmt=conn.createStatement();
rs=stmt.executeQuery(sql);
}catch(SQLException e)
{
out.println("db connection error!");
}
try{
while(rs.next()){
//rs.setContentType("image/jpeg");
ServletOutputStream sout = response.getOutputStream();
InputStream in = rs.getBinaryStream("img");
byte b[] = new byte[0x7a120];
for(int i = in.read(b); i != -1;)
{
sout.write(b);
in.read(b);
}
sout.flush();
sout.close();
}
}
catch(Exception e){System.out.println(e);}
%>
</body>
</html>

62,625

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧