黄色国产视频,男女啪啪18禁无遮挡激烈,久草热8精品视频在线观看,四虎国产精品永久在线下载

            講解Java從數據庫中讀取Blob對象圖片并顯示的方法

            時間:2022-06-27 09:29:28 數據庫操作系統 我要投稿
            • 相關推薦

            講解Java從數據庫中讀取Blob對象圖片并顯示的方法

              本文實例講述了Java從數據庫中讀取Blob對象圖片并顯示的方法。分享給大家供大家參考。具體實現方法如下:

              第一種方法:

              大致方法就是,從數據庫中讀出Blob的流來,寫到頁面中去:

              復制代碼 代碼如下: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();

              }

              在頁面中:

              復制代碼 代碼如下:<%

              String path = request.getContextPath();

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

              %>

              

              搞定。

              第二種方法:

              整個流程分為四步,連接oracle數據庫 -> 讀取blob圖片字段 -> 對圖片進行縮放 ->把圖片展示在jsp頁面上。

              復制代碼 代碼如下: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驅動失敗,原因:" + ex.getMessage());

              }

              }

              public Connection getConnection(){

              try{

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

              //從配置文件中讀取數據庫信息

              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("請檢測配置文件中的數據庫信息是否正確." );

              }

              return this.myConnection;

              }

              }

              2. 讀取blob字段

              在OracleQueryBean類中增加一個函數,來進行讀取,具體代碼如下:

              復制代碼 代碼如下: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("獲取圖片數據失敗,原因:" + 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. 縮放圖片

              因為圖片的大小可能不一致,但是在頁面中輸出的大小需要統一,所以需要

              在OracleQueryBean類中增加一個函數,來進行縮放,具體代碼如下:

              復制代碼 代碼如下: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);

              //轉換成byte字節

              ByteArrayOutputStream baos = new ByteArrayOutputStream();

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

              newdata = baos.toByteArray();

              }catch(IOException e){

              e.printStackTrace();

              }

              return newdata;

              }

              4. 展示在頁面

              頁面使用OracleQueryBean來根據用戶提供的圖片id進行查詢,在讀取并進行縮放后,通過jsp頁面進行展示,具體代碼如下:

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

              

              <%

              response.setContentType("image/jpeg");

              //圖片在數據庫中的 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數據

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

              ServletOutputStream op = response.getOutputStream();

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

              op.close();

              op = null;

              response.flushBuffer();

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

              out.clear();

              out = pageContext.pushBody();

              }

              %>

              5. OracleQueryBean查詢類的整體代碼

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

              復制代碼 代碼如下: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驅動失敗,原因:" + ex.getMessage());

              }

              }

              public Connection getConnection(){

              try{

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

              //從配置文件中讀取數據庫信息

              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("請檢測配置文件中的數據庫信息是否正確." );

              }

              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("獲取圖片數據失敗,原因:" + 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("獲取圖片數據失敗,原因:" + 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);

              //轉換成byte字節

              ByteArrayOutputStream baos = new ByteArrayOutputStream();

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

              newdata = baos.toByteArray();

              }catch(IOException e){

              e.printStackTrace();

              }

              return newdata;

              }

              }

              下面是我的存儲讀取blob圖片的案例

              復制代碼 代碼如下: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, "測試圖片");

              pstmt.executeUpdate();

              fis.close();

              pstmt.close();

              con.close();

              }

              }

              復制代碼 代碼如下: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顯示

              復制代碼 代碼如下:

              web.xml中配置

              復制代碼 代碼如下:

              genImage

              ReadPhoto

              

              

              genImage

              /genImage

              

              希望本文所述對大家的Java程序設計有所幫助。

            【講解Java從數據庫中讀取Blob對象圖片并顯示的方法】相關文章:

            使用Java程序連接各種數據庫的方法07-01

            java面試題:文件讀取問題.07-13

            電腦的硬盤無法讀取顯示I/O設備錯誤07-02

            java數據庫面試題07-13

            關于數據庫中跨平臺遷移方法介紹06-28

            互聯網數據庫考點講解06-28

            主要C#,JAVA,數據庫,簡歷中的專業能力怎么寫較好?07-11

            解析android中隱藏與顯示軟鍵盤的實現方法07-04

            收縮SQL數據庫的方法06-28

            實例講解Ruby使用設計模式中的裝飾器模式的方法參考06-29

            主站蜘蛛池模板: 久久福利视频一区| 国产无遮挡猛进猛出免费软件| 无遮挡午夜男女xx00动态| 亚洲日韩aⅴ在线视频| 麻豆福利视频导航| 777色播| 亚洲成人首页| 日韩精品一区二区三区中文无码| 国产aa级片| 天堂伊人| 91视频在线观看网| 亚洲欧美日韩另类丝袜一区| 性色av蜜臀av色欲av| 久久久久久久久久久久国产| 中文字幕第56页| 看看黄色毛片| 亚洲高清国产拍精品青青草原| 亚洲午夜爱爱香蕉片| 欧美v亚洲| 成人午夜激情| 图片区小说区区国产明星| 欧洲人激情毛片无码视频| 人妻少妇无码精品视频区| 欧美韩日一区二区三区| 亚洲午夜伦理| 国产国语在线播放视频| 日射精情感性色视频| 成人免费毛片网| 日韩视频第一页| 天天操2018| 国产丝袜在线精品丝袜| 18禁真人抽搐一进一出在线| 国产精品视频一区二区三区 | 精品人妻系列无码人妻漫画| 国产精品一区二区吃奶在线观看| 午夜草逼| 99热香蕉| 色8激情欧美成人久久综合电| 久久乐国产精品亚洲综合| 北条麻纪av全部免费观看| 少妇无套内谢少妇在线播放|