当前位置: 代码迷 >> Java Web开发 >> java+SQLserver中寄存和取出图片
  详细解决方案

java+SQLserver中寄存和取出图片

热度:364   发布时间:2016-04-17 12:32:21.0
java+SQLserver中存放和取出图片
学了 javaWeb后,做了一个上传资料的程序
使用SQLserver数据库,
刚开始把图片存进去了,就是取不出来,
请高手们教教 我这个新手啊

------解决方案--------------------
我来给你顶起,大家多帮帮忙啊
------解决方案--------------------
要用二进制的, 传进去前要转换byte 类型的
------解决方案--------------------
接触不多,不是很清楚
------解决方案--------------------
用DataSet的getBinaryStream()方法从数据库获得输入流
对流进行处理就行了
------解决方案--------------------
以下是获取数据库图片的方法,从表现层(一般是Servlet)传入,以下的三个参数,String name 为图片的ID用户名!
(此方法的作用是根据传入的用户名,查询对应用户的照片,然后输出!) 
public void getImage(String name,HttpServletRequest request,
HttpServletResponse response) {
Connection con = null;
Statement st = null;
ResultSet rs = null;
try {
con = ds.getConnection();
st = con.createStatement();
rs = st.executeQuery("select P_photo from personnel where P_name='"+name+"'");
if (rs.next()) {
in = rs.getBinaryStream(1);
response.reset();
response.setContentType("image/jpg"); //设置响应方式为图片形式
OutputStream toClient = null;
try {
toClient = response.getOutputStream();
byte[] P_Buf = new byte[len];
int i;
while ((i = in.read(P_Buf)) != -1) {
toClient.write(P_Buf, 0, i);
}
in.close();
toClient.flush();
toClient.close();
} catch (IOException ex1) {
ex1.printStackTrace();
}
}
} catch (SQLException ex) {
ex.printStackTrace();
} finally {
this.closeResultSet(rs); //因为采用Tomcat连接池技术,所以连接结束后关掉连接!
this.closeStatement(st);
this.closeConnection(con);
}
}
------解决方案--------------------
呵呵 昨天也有一个朋友问了这个问题
其实就是一个PreparedStatement类的应用。
把我昨天写的例子照拿过来
希望对你有帮助

Java code
import java.io.*;import java.awt.image.BufferedImage;import javax.imageio.ImageIO;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.sql.*;public class imageServlet extends HttpServlet {    /**     * Constructor of the object.     */    Connection conn = null;    public imageServlet() {        super();        try {            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");            this.conn = DriverManager.getConnection("jdbc:odbc:test");        } catch (Exception e) {            e.printStackTrace();        }    }        public void insertImgToDb() {        try {            PreparedStatement stmt = this.conn.prepareStatement("insert into test (imgtest) values(?)");            File file = new File("d:\\a.JPG");                    FileInputStream input = new FileInputStream(file);            stmt.setBinaryStream(1, input,input.available());                        //input.close();            stmt.executeUpdate();            stmt.close();            input.close();                    } catch (Exception e) {            e.printStackTrace();        }            }        public BufferedImage getImgFromDb() {        BufferedImage image = null;                try {            PreparedStatement stmt = conn.prepareStatement("select imgtest from test");            ResultSet rs = stmt.executeQuery();            rs.next();                        image = ImageIO.read(rs.getBinaryStream(1));            rs.close();            stmt.close();            conn.close();        } catch (Exception e) {            e.printStackTrace();        }                return image;    }    /**     * Destruction of the servlet. <br>     */    public void destroy() {        super.destroy(); // Just puts "destroy" string in log        // Put your code here    }    public void doGet(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {        response.setContentType("image/jpeg");        this.insertImgToDb();        BufferedImage img = this.getImgFromDb();        ImageIO.write(img, "JPG", response.getOutputStream());    }    public void doPost(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {        this.doGet(request, response);    }    public void init() throws ServletException {        // Put your code here    }}
  相关解决方案