1、怎样将文件以字节流(byte[])存入数据库,在数据库中存放字节流的类型为image
如:
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、怎样将数据库中存放的字节流转换成图片
页面上读取从数据库读取的字节流生成的图片的方法:
<img src="index/makeImage.jsp?id=124"></img>
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<Object> 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<Object> searchImage(int userid) { //通过微博信息表的userid获取用户头像字节流
Connection conn = CatenateDB.createConn();
String sql = "select head from user_message where userid=?";
PreparedStatement ps = CatenateDB.prepare(conn, sql);
ArrayList<Object> array = new ArrayList<Object>();
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();
}
}
}