插入图片:
注意如果mysql是gbk编码的要先把mysql的字符集设置Latin1,输入完图片后再设回来
import java.sql.*;
import java.io.*;
class InsertPhoto{
public static void main(String[] args) throws Exception{
Class.forName("com.mysql.jdbc.Driver");
Connection con = DriverManager.getConnection("jdbc:mysql://127.0.0.1/tjphotodb?user=root&password=root");
File f = new File("c:/test.jpg");
FileInputStream fis = new FileInputStream(f);
String sql = "insert into tjphotodb.t_photo(alarmid,photoblob) values(0,?)";
PreparedStatement pstmt = con.prepareStatement(sql);
pstmt.setBinaryStream(1,fis,(int)f.length());
pstmt.executeUpdate();
fis.close();
pstmt.close();
con.close();
}
}
读取并显示图片:
后台用一个servlet来读取,然后让前台的jsp显示
后台servlet:
public static InputStream query_getPhotoImageBlob(int id){
String sql = "select photoblob from "+DB_TABLE_PHOTO+" where id="+id;
Connection con = null;
Statement stmt = null;
ResultSet rs = null;
InputStream result = null;
try {
con = getConnection();
stmt = con.createStatement();
rs = stmt.executeQuery(sql);
if (rs.next())
result = rs.getBlob("photoblob").getBinaryStream();
} catch (SQLException e) {
// TODO: handle exception
System.err.println(e.getMessage());
}finally{
closeConnection(rs,stmt,con);
}
return result;
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
if (request.getParameter("id") != null){
response.setContentType("image/jpeg");
InputStream is = DBUtil.query_getPhotoImageBlob(Integer.valueOf(request.getParameter("id")).intValue());
if (is != null){
try {
is = new BufferedInputStream(is);
BufferedImage bi = ImageIO.read(is);
OutputStream os = response.getOutputStream();
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(os);
encoder.encode(bi);
os.close();
is.close();
} catch (IOException e) {
// TODO: handle exception
System.err.println(e.getMessage());
}
}
}
}
前台jsp:
<
img style="width:320px;height:240px"
src="<%=helper.HTMLHelper.getProjectPath(request) %>/servlet/genImage?id=<%=request.getParameter("id")%>"/>