插入图片:
注意如果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")%>"/>
import java.io.*; import java.sql.*; public class DBTest { public static void main(String[] args) { String driver = "com.mysql.jdbc.Driver"; String url = "jdbc:mysql://localhost:3306/upload?useUnicode=true&characterEncoding=Big5"; String user = "caterpillar"; String password = "123456"; try { Class.forName(driver); Connection conn = DriverManager.getConnection(url, user, password); File file = new File("./logo_phpbb.jpg"); int length = (int) file.length(); InputStream fin = new FileInputStream(file); PreparedStatement pstmt = conn.prepareStatement( "INSERT INTO files VALUES(?, ?)"); pstmt.setString(1, "Logo"); pstmt.setBinaryStream (2, fin, length); pstmt.executeUpdate(); pstmt.clearParameters(); pstmt.close(); fin.close(); Statement stmt = conn.createStatement(); ResultSet result = stmt.executeQuery("SELECT * FROM files"); result.next(); String description = result.getString(1); Blob blob = result.getBlob(2); System.out.println("描述:" + description); FileOutputStream fout = new FileOutputStream("./logo_phpbb_2.jpg"); fout.write(blob.getBytes(1, (int)blob.length())); fout.flush(); fout.close(); stmt.close(); conn.close(); } catch(ClassNotFoundException e) { System.out.println("找不到驱动"); e.printStackTrace(); } catch(SQLException e) { e.printStackTrace(); } catch(IOException e) { e.printStackTrace(); } } }