jsp通过从数据库读取的字节流(byte[])制作图片

1、怎样将文件以字节流(byte[])存入数据库,在数据库中存放字节流的类型为image

如:

jsp通过从数据库读取的字节流(byte[])制作图片_第1张图片

jsp通过从数据库读取的字节流(byte[])制作图片_第2张图片

jsp通过从数据库读取的字节流(byte[])制作图片_第3张图片

         
PreparedStatement ps = CatenateDB.prepare(conn, sql);
       String F = src+"\\"+f; //文件路径(包含文件名)
       try {
          InputStream is = new FileInputStream(F);
          ps.setBinaryStream(1, is, is.available());
          int count = ps.executeUpdate();
          if(count>0){
                i=1;
            }else{
                i=-1;
            }
       } catch (Exception e) {
          e.printStackTrace();
       }

注意:下面方法的conn为连接数据库的类对象,sql是将更新上图所示的表格的head字段

2、怎样将数据库中存放的字节流转换成图片

页面上读取从数据库读取的字节流生成的图片的方法:
 
jsp通过从数据库读取的字节流(byte[])制作图片_第4张图片
makeImage.jsp源码:
<%@ page contentType="image/jpeg" pageEncoding="gbk"%>
<%@ page import="com.other.MakeImage" %>
<%
   try{
      int id = Integer.parseInt(request.getParameter("id")); //用户userid
      new MakeImage(id,response.getOutputStream());
   }catch(Exception e){
     
   }
   out.clear();
   out = pageContext.pushBody();
%>

com.other.MakeImage.java源码:

/**
 * @System: Online CV System
 * @Version:1.0
 * Copyright @ 2011 by GuangDongOceanUniversity
 * Class:
 * Sumarry:从数据库读取二进制字节流(byte[])到页面中生成图片
 * Create: 2011.12.31
 * Update:
 */
package com.other;

import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;
import com.microbolg.DaoMicrobolg;

public class MakeImage{

    /* 方法:  MakeImage
    * 描述:  从数据库读取二进制字节流(byte[])到页面中生成图片
    * 输入:  int userid 用户ID , OutputStream os 从数据库读取的图片二进制字节流
    * 返回: 
    * 异常处理:
    */
   public MakeImage(int userid,OutputStream os)throws IOException{
       DaoMicrobolg dao = new DaoMicrobolg();
       ArrayList array = dao.searchImage(userid);
       os.write((byte[])array.get(0), 0, ((byte[])array.get(0)).length); 
        os.flush(); 
        os.close();     
   }
   
}

com.microbolg.DaoMicrobolg类中的searchImage方法:

public ArrayList searchImage(int userid) { //通过微博信息表的userid获取用户头像字节流
       Connection conn = CatenateDB.createConn();
       String sql = "select head from user_message where userid=?";
       PreparedStatement ps = CatenateDB.prepare(conn, sql);
       ArrayList array = new ArrayList();
       try {
          ps.setInt(1,userid);
          ResultSet rs = ps.executeQuery();
          while(rs.next()){
                 array.add(rs.getBytes(1));
          }
       } catch (SQLException e) {
          e.printStackTrace();
       }
       CatenateDB.close(ps);
       CatenateDB.close(conn);
       return array;
   }

CatenateDB.java:

package com.util.jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class CatenateDB {
	public static Connection createConn() {
		Connection conn = null;
		try {
			Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
			conn = DriverManager.getConnection("jdbc:sqlserver://localhost:1433;DatabaseName=microbolg", "sa", "");
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return conn;
	}
	
	public static PreparedStatement prepare(Connection conn, String sql) {
		PreparedStatement ps = null;
		try {
			ps = conn.prepareStatement(sql);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return ps;
	}
	
	public static void close(Connection conn) {
		
		try {
			conn.close();
			conn = null;
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	public static void close(Statement stmt) {
		try {
			stmt.close();
			stmt = null;
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	public static void close(ResultSet rs) {
		try {
			rs.close();
			rs = null;
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
}


 



 

 


 

你可能感兴趣的:(Java,Web,Java)