在线观看1024国产,亚洲精品国产综合野狼,欧美自拍清纯日韩一区二区三区,欧美 亚洲 国产 高潮

<dfn id="u8moo"><source id="u8moo"></source></dfn>
  • <dd id="u8moo"><s id="u8moo"></s></dd><menu id="u8moo"></menu><dd id="u8moo"></dd>
    
    
    <ul id="u8moo"></ul>
    <ul id="u8moo"><acronym id="u8moo"></acronym></ul>
  • <strike id="u8moo"><noscript id="u8moo"></noscript></strike>
  • <dd id="u8moo"></dd>
  • 講解Java從數(shù)據(jù)庫(kù)中讀取Blob對(duì)象圖片并顯示的方法

    時(shí)間:2022-06-27 09:29:28 數(shù)據(jù)庫(kù)操作系統(tǒng) 我要投稿
    • 相關(guān)推薦

    講解Java從數(shù)據(jù)庫(kù)中讀取Blob對(duì)象圖片并顯示的方法

      本文實(shí)例講述了Java從數(shù)據(jù)庫(kù)中讀取Blob對(duì)象圖片并顯示的方法。分享給大家供大家參考。具體實(shí)現(xiàn)方法如下:

      第一種方法:

      大致方法就是,從數(shù)據(jù)庫(kù)中讀出Blob的流來(lái),寫到頁(yè)面中去:

      復(fù)制代碼 代碼如下:Connection conn = DBManager.getConnection();

      String sql = "SELECT picture FROM teacher WHERE id=1";

      PreparedStatement ps = null;

      ResultSet rs = null;

      InputStream is = null;

      OutputStream os = null;

      try {

      ps = conn.prepareStatement(sql);

      rs = ps.executeQuery();

      if(rs.next()){

      is = rs.getBinaryStream(1);

      }

      response.setContentType("text/html");

      os = response.getOutputStream();

      int num;

      byte buf[] = new byte[1024];

      while( (num=is.read(buf))!=-1 ){

      os.write(buf, 0, num);

      }

      } catch (SQLException e) {

      e.printStackTrace();

      }

      try {

      is.close();

      os.close();

      rs.close();

      ps.close();

      } catch (SQLException e) {

      e.printStackTrace();

      }

      在頁(yè)面中:

      復(fù)制代碼 代碼如下:<%

      String path = request.getContextPath();

      String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";

      %>

      

      搞定。

      第二種方法:

      整個(gè)流程分為四步,連接oracle數(shù)據(jù)庫(kù) -> 讀取blob圖片字段 -> 對(duì)圖片進(jìn)行縮放 ->把圖片展示在jsp頁(yè)面上。

      復(fù)制代碼 代碼如下:import java.sql.*;

      import java.io.*;

      import javax.imageio.ImageIO;

      import java.awt.image.BufferedImage;

      import java.awt.image.AffineTransformOp;

      import java.awt.geom.AffineTransform;

      public class OracleQueryBean {

      private final String oracleDriverName = "oracle.jdbc.driver.OracleDriver";

      private Connection myConnection = null;

      private String strTabName;

      private String strIDName;

      private String strImgName;

      public OracleQueryBean(){

      try{

      Class.forName(oracleDriverName);

      }catch(ClassNotFoundException ex){

      System.out.println("加載jdbc驅(qū)動(dòng)失敗,原因:" + ex.getMessage());

      }

      }

      public Connection getConnection(){

      try{

      //用戶名+密碼; 以下使用的Test就是Oracle里的表空間

      //從配置文件中讀取數(shù)據(jù)庫(kù)信息

      GetPara oGetPara = new GetPara();

      String strIP = oGetPara.getPara("serverip");

      String strPort = oGetPara.getPara("port");

      String strDBName = oGetPara.getPara("dbname");

      String strUser = oGetPara.getPara("user");

      String strPassword = oGetPara.getPara("password");

      this.strTabName = oGetPara.getPara("tablename");

      this.strIDName = oGetPara.getPara("imgidname");

      this.strImgName = oGetPara.getPara("imgname");

      String oracleUrlToConnect ="jdbc:oracle:thin:@"+strIP+":"+strPort+":"+strDBName;

      this.myConnection = DriverManager.getConnection(oracleUrlToConnect, strUser, strPassword);

      }catch(Exception ex){

      System.out.println("Can not get connection:" + ex.getMessage());

      System.out.println("請(qǐng)檢測(cè)配置文件中的數(shù)據(jù)庫(kù)信息是否正確." );

      }

      return this.myConnection;

      }

      }

      2. 讀取blob字段

      在OracleQueryBean類中增加一個(gè)函數(shù),來(lái)進(jìn)行讀取,具體代碼如下:

      復(fù)制代碼 代碼如下:public byte[] GetImgByteById(String strID, int w, int h){

      //System.out.println("Get img data which id is " + nID);

      if(myConnection == null)

      this.getConnection();

      byte[] data = null;

      try {

      Statement stmt = myConnection.createStatement();

      ResultSet myResultSet = stmt.executeQuery("select " + this.strIDName + " from " + this.strTabName + " where " + this.strIDName + "=" + strID);

      StringBuffer myStringBuffer = new StringBuffer();

      if (myResultSet.next()) {

      java.sql.Blob blob = myResultSet.getBlob(this.strImgName);

      InputStream inStream = blob.getBinaryStream();

      try {

      long nLen = blob.length();

      int nSize = (int) nLen;

      //System.out.println("img data size is :" + nSize);

      data = new byte[nSize];

      inStream.read(data);

      inStream.close();

      } catch (IOException e) {

      System.out.println("獲取圖片數(shù)據(jù)失敗,原因:" + e.getMessage());

      }

      data = ChangeImgSize(data, w, h);

      }

      System.out.println(myStringBuffer.toString());

      myConnection.commit();

      myConnection.close();

      } catch (SQLException ex) {

      System.out.println(ex.getMessage());

      }

      return data;

      }

      3. 縮放圖片

      因?yàn)閳D片的大小可能不一致,但是在頁(yè)面中輸出的大小需要統(tǒng)一,所以需要

      在OracleQueryBean類中增加一個(gè)函數(shù),來(lái)進(jìn)行縮放,具體代碼如下:

      復(fù)制代碼 代碼如下:private byte[] ChangeImgSize(byte[] data, int nw, int nh){

      byte[] newdata = null;

      try{

      BufferedImage bis = ImageIO.read(new ByteArrayInputStream(data));

      int w = bis.getWidth();

      int h = bis.getHeight();

      double sx = (double) nw / w;

      double sy = (double) nh / h;

      AffineTransform transform = new AffineTransform();

      transform.setToScale(sx, sy);

      AffineTransformOp ato = new AffineTransformOp(transform, null);

      //原始顏色

      BufferedImage bid = new BufferedImage(nw, nh, BufferedImage.TYPE_3BYTE_BGR);

      ato.filter(bis, bid);

      //轉(zhuǎn)換成byte字節(jié)

      ByteArrayOutputStream baos = new ByteArrayOutputStream();

      ImageIO.write(bid, "jpeg", baos);

      newdata = baos.toByteArray();

      }catch(IOException e){

      e.printStackTrace();

      }

      return newdata;

      }

      4. 展示在頁(yè)面

      頁(yè)面使用OracleQueryBean來(lái)根據(jù)用戶提供的圖片id進(jìn)行查詢,在讀取并進(jìn)行縮放后,通過(guò)jsp頁(yè)面進(jìn)行展示,具體代碼如下:

      復(fù)制代碼 代碼如下:<%@ page="" language="java" contenttype="text/html;;charset=gbk">

      

      <%

      response.setContentType("image/jpeg");

      //圖片在數(shù)據(jù)庫(kù)中的 ID

      String strID = request.getParameter("id");

      //要縮略或放大圖片的寬度

      String strWidth = request.getParameter("w");

      //要縮略或放大圖片的高度

      String strHeight = request.getParameter("h");

      byte[] data = null;

      if(strID != null){

      int nWith = Integer.parseInt(strWidth);

      int nHeight = Integer.parseInt(strHeight);

      //獲取圖片的byte數(shù)據(jù)

      data = OrcleQuery.GetImgByteById(strID, nWith, nHeight);

      ServletOutputStream op = response.getOutputStream();

      op.write(data, 0, data.length);

      op.close();

      op = null;

      response.flushBuffer();

      //清除輸出流,防止釋放時(shí)被捕獲異常

      out.clear();

      out = pageContext.pushBody();

      }

      %>

      5. OracleQueryBean查詢類的整體代碼

      OracleQueryBean.java文件代碼如下所示:

      復(fù)制代碼 代碼如下:import java.sql.*;

      import java.io.*;

      import javax.imageio.ImageIO;

      import java.awt.image.BufferedImage;

      import java.awt.image.AffineTransformOp;

      import java.awt.geom.AffineTransform;

      public class OracleQueryBean {

      private final String oracleDriverName = "oracle.jdbc.driver.OracleDriver";

      private Connection myConnection = null;

      private String strTabName;

      private String strIDName;

      private String strImgName;

      public OracleQueryBean(){

      try{

      Class.forName(oracleDriverName);

      }catch(ClassNotFoundException ex){

      System.out.println("加載jdbc驅(qū)動(dòng)失敗,原因:" + ex.getMessage());

      }

      }

      public Connection getConnection(){

      try{

      //用戶名+密碼; 以下使用的Test就是Oracle里的表空間

      //從配置文件中讀取數(shù)據(jù)庫(kù)信息

      GetPara oGetPara = new GetPara();

      String strIP = oGetPara.getPara("serverip");

      String strPort = oGetPara.getPara("port");

      String strDBName = oGetPara.getPara("dbname");

      String strUser = oGetPara.getPara("user");

      String strPassword = oGetPara.getPara("password");

      this.strTabName = oGetPara.getPara("tablename");

      this.strIDName = oGetPara.getPara("imgidname");

      this.strImgName = oGetPara.getPara("imgname");

      String oracleUrlToConnect ="jdbc:oracle:thin:@"+strIP+":"+strPort+":"+strDBName;

      this.myConnection = DriverManager.getConnection(oracleUrlToConnect, strUser, strPassword);

      }catch(Exception ex){

      System.out.println("Can not get connection:" + ex.getMessage());

      System.out.println("請(qǐng)檢測(cè)配置文件中的數(shù)據(jù)庫(kù)信息是否正確." );

      }

      return this.myConnection;

      }

      public byte[] GetImgByteById(String strID, int w, int h){

      //System.out.println("Get img data which id is " + nID);

      if(myConnection == null)

      this.getConnection();

      byte[] data = null;

      try {

      Statement stmt = myConnection.createStatement();

      ResultSet myResultSet = stmt.executeQuery("select " + this.strIDName + " from " + this.strTabName + " where " + this.strIDName + "=" + strID);

      StringBuffer myStringBuffer = new StringBuffer();

      if (myResultSet.next()) {

      java.sql.Blob blob = myResultSet.getBlob(this.strImgName);

      InputStream inStream = blob.getBinaryStream();

      try {

      long nLen = blob.length();

      int nSize = (int) nLen;

      //System.out.println("img data size is :" + nSize);

      data = new byte[nSize];

      inStream.read(data);

      inStream.close();

      } catch (IOException e) {

      System.out.println("獲取圖片數(shù)據(jù)失敗,原因:" + e.getMessage());

      }

      data = ChangeImgSize(data, w, h);

      }

      System.out.println(myStringBuffer.toString());

      myConnection.commit();

      myConnection.close();

      } catch (SQLException ex) {

      System.out.println(ex.getMessage());

      }

      return data;

      }

      public byte[] GetImgByteById(String strID){

      //System.out.println("Get img data which id is " + nID);

      if(myConnection == null)

      this.getConnection();

      byte[] data = null;

      try {

      Statement stmt = myConnection.createStatement();

      ResultSet myResultSet = stmt.executeQuery("select " + this.strIDName + " from " + this.strTabName + " where " + this.strIDName + "=" + strID);

      StringBuffer myStringBuffer = new StringBuffer();

      if (myResultSet.next()) {

      java.sql.Blob blob = myResultSet.getBlob(this.strImgName);

      InputStream inStream = blob.getBinaryStream();

      try {

      long nLen = blob.length();

      int nSize = (int) nLen;

      data = new byte[nSize];

      inStream.read(data);

      inStream.close();

      } catch (IOException e) {

      System.out.println("獲取圖片數(shù)據(jù)失敗,原因:" + e.getMessage());

      }

      }

      System.out.println(myStringBuffer.toString());

      myConnection.commit();

      myConnection.close();

      } catch (SQLException ex) {

      System.out.println(ex.getMessage());

      }

      return data;

      }

      private byte[] ChangeImgSize(byte[] data, int nw, int nh){

      byte[] newdata = null;

      try{

      BufferedImage bis = ImageIO.read(new ByteArrayInputStream(data));

      int w = bis.getWidth();

      int h = bis.getHeight();

      double sx = (double) nw / w;

      double sy = (double) nh / h;

      AffineTransform transform = new AffineTransform();

      transform.setToScale(sx, sy);

      AffineTransformOp ato = new AffineTransformOp(transform, null);

      //原始顏色

      BufferedImage bid = new BufferedImage(nw, nh, BufferedImage.TYPE_3BYTE_BGR);

      ato.filter(bis, bid);

      //轉(zhuǎn)換成byte字節(jié)

      ByteArrayOutputStream baos = new ByteArrayOutputStream();

      ImageIO.write(bid, "jpeg", baos);

      newdata = baos.toByteArray();

      }catch(IOException e){

      e.printStackTrace();

      }

      return newdata;

      }

      }

      下面是我的存儲(chǔ)讀取blob圖片的案例

      復(fù)制代碼 代碼如下:import java.sql.*;

      import java.io.*;

      public 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/wiseweb?user=root&password=root");

      File f = new File("e:/123.jpg");

      FileInputStream fis = new FileInputStream(f);

      String sql = " into photo(photo,photoName) values(";

      PreparedStatement pstmt = con.prepareStatement(sql);

      pstmt.setBinaryStream(1,fis,(int)f.length());

      pstmt.setString(2, "測(cè)試圖片");

      pstmt.executeUpdate();

      fis.close();

      pstmt.close();

      con.close();

      }

      }

      復(fù)制代碼 代碼如下:import java.awt.image.BufferedImage;

      import java.io.BufferedInputStream;

      import java.io.IOException;

      import java.io.InputStream;

      import java.io.OutputStream;

      import java.sql.Connection;

      import java.sql.DriverManager;

      import java.sql.ResultSet;

      import java.sql.SQLException;

      import java.sql.Statement;

      import javax.imageio.ImageIO;

      import javax.servlet.http.HttpServlet;

      import javax.servlet.http.HttpServletRequest;

      import javax.servlet.http.HttpServletResponse;

      import com.sun.image.codec.jpeg.JPEGCodec;

      import com.sun.image.codec.jpeg.JPEGImageEncoder;

      public class ReadPhoto extends HttpServlet{

      private static final long serialVersionUID = 1L;

      public void doGet(HttpServletRequest request, HttpServletResponse response){

      if(request.getParameter("id") != null){

      response.setContentType("image/jpeg");

      try {

      InputStream is = query_getPhotoImageBlob(Integer.parseInt(request.getParameter("id"))) ;

      if(is != null){

      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){

      e.printStackTrace();

      }catch (NumberFormatException e) {

      // TODO Auto-generated catch block

      e.printStackTrace();

      } catch (ClassNotFoundException e) {

      // TODO Auto-generated catch block

      e.printStackTrace();

      } catch (SQLException e) {

      // TODO Auto-generated catch block

      e.printStackTrace();

      }

      }

      }

      public static InputStream query_getPhotoImageBlob(int id) throws ClassNotFoundException, SQLException{

      String sql = "select photo from photo where id="+id;

      Connection con = null;

      Statement stmt = null;

      ResultSet rs = null;

      InputStream result = null;

      try {

      Class.forName("com.mysql.jdbc.Driver");

      con = DriverManager.getConnection("jdbc:mysql://127.0.0.1/wiseweb?user=root&password=root");

      stmt = con.createStatement();

      rs = stmt.executeQuery(sql);

      if (rs.next())

      result = rs.getBlob("photo").getBinaryStream();

      } catch (SQLException e) {

      // TODO: handle exception

      System.err.println(e.getMessage());

      }finally{

      rs.close();

      stmt.close();

      con.close();

      }

      return result;

      }

      }

      jsp顯示

      復(fù)制代碼 代碼如下:

      web.xml中配置

      復(fù)制代碼 代碼如下:

      genImage

      ReadPhoto

      

      

      genImage

      /genImage

      

      希望本文所述對(duì)大家的Java程序設(shè)計(jì)有所幫助。

    【講解Java從數(shù)據(jù)庫(kù)中讀取Blob對(duì)象圖片并顯示的方法】相關(guān)文章:

    使用Java程序連接各種數(shù)據(jù)庫(kù)的方法07-01

    java面試題:文件讀取問(wèn)題.07-13

    電腦的硬盤無(wú)法讀取顯示I/O設(shè)備錯(cuò)誤07-02

    java數(shù)據(jù)庫(kù)面試題07-13

    關(guān)于數(shù)據(jù)庫(kù)中跨平臺(tái)遷移方法介紹06-28

    互聯(lián)網(wǎng)數(shù)據(jù)庫(kù)考點(diǎn)講解06-28

    主要C#,JAVA,數(shù)據(jù)庫(kù),簡(jiǎn)歷中的專業(yè)能力怎么寫較好?07-11

    解析android中隱藏與顯示軟鍵盤的實(shí)現(xiàn)方法07-04

    收縮SQL數(shù)據(jù)庫(kù)的方法06-28

    實(shí)例講解Ruby使用設(shè)計(jì)模式中的裝飾器模式的方法參考06-29