java 向mysql插入blob的图片以及从mysql读取图片并用jsp显示及CLOB

 

插入图片:
注意如果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();
        }
    }
}

你可能感兴趣的:(mysql,数据库)