数据库中使用image类型,Java实体类中要是有bytep[]字节数组的类型来进行封装
Bean层

public class Mark {
	private String MARKID;
	private String MARKTYPE;
	private String DESCR;
	private byte[] PIC;

接下来就可以对数据库进行查询,得到数据
DAO层

public Mark getImgByWonum(String wonum) {
		try {
			con = DBUtil.getConnection();
			String sql = "select MARK.PIC from WOPARENT,MARK,WO2DTL,PRODUCT WHERE WO2DTL.PRONUM=PRODUCT.PRONUM and MARK.MARKID=WO2DTL.PRONUM and WOPARENT.WONUM=WO2DTL.WONUM and WOPARENT.WONUM=?";
			ps = con.prepareStatement(sql);
			ps.setString(1, wonum);
			rs = ps.executeQuery();
			
			
			try {
				while(rs.next()){
					byte[] pic = rs.getBytes("PIC");
					Mark mark = new Mark();
					mark.setPIC(pic);			//保存数据
					//System.out.println("图片是:"+pic);
					return mark;		//返回这个对象
					
				}
			} catch (Exception e) {
				// TODO: handle exception
			}
			
			
			
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally{
			try {
				DBUtil.closeConnection(con, ps, rs);
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		return null;
	}

得到数据后,如何显示在JSP页面上呢?别急,往下看~!
servlet


protected void showPic(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		//PrintWriter out1 = response.getWriter();
		HttpSession session = request.getSession();
		String wonum = (String)session.getAttribute("wonum");
		IMarkService ims = new MarkServiceImpl();
		Mark mm = ims.getImgByWonum(wonum);		//调用service层得到数据
		if(mm!=null){			//先要给得到的对象进行判空处理
			byte[] pic = mm.getPIC();		//获得图片
			ByteArrayInputStream bais = new ByteArrayInputStream(pic);	//用来存储byte[]字节数组中的数据
			 try {
				BufferedImage bi1 =ImageIO.read(bais);	//将图片加载到内存中,并可得到图片的详细信息
				File w2 = new File("E:\\img\\00000000003.jpg");		//得到的·图片需要指定一个存储位置
				if(!w2.exists()){//如果文件夹不存在
					w2.mkdir();//创建文件夹
				}
				ImageIO.write(bi1, "jpg", w2);//把得到的图片转为JPG格式,并写入到w2这个位置上
				
				if(w2.exists()){
					 FileInputStream is = new FileInputStream(w2);
					 int i = is.available(); 
					 byte data[] = new byte[i];  
					   is.read(data); // 读数据  
					   is.close();
					   response.setContentType("image/*"); // 设置返回的文件类型  
					   OutputStream toClient = response.getOutputStream(); // 得到向客户端输出二进制数据的对象  
					   toClient.write(data); // 输出数据  
					   toClient.close();  
				}
				
				w2.delete();	//为了防止图片过多占用内存,当流程执行完之后会删除文件夹下面的图片,单img文件夹不会删除
				
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} 
		}else if(mm==null || mm.equals("")){
			response.sendRedirect(request.getContextPath()+"/watchBoard.jsp");
		}
		

读取本地文件,接着把得到的数据转为image格式,输出数据,然后在web.xml配置一下servlet名称地址,这样servlet就完成了
警告:1.使用了OutPutStream就不能再使用PrintWriter out1 = response.getWriter();
2.需要先在硬盘上指定的位置创建img这个文件夹

JSP
java把SQLServer中image类型16进制的图片显示到JSP页面
这样整个流程就搞定了~

相关文章: