青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

大龍的博客

常用鏈接

統計

最新評論

oracle blob數據存取

    Oracle中的lob (Large Object)可以存儲非常大的數據(可能是4GB),這樣就可以通過將文件或其它任何對象序列化成字節輸出流(OutputStream)后寫入數據 庫,之后使用字節輸入流(InputStream)將數據讀出然后反序列化為原始文件或對象。操作時需要使用oracle的JDBC包,它擴展了sun的 JDBC包中的Blob對象。
    以下是一個保存圖片進數據庫的例子:
1.servlet:用于保存圖片并將圖片輸出
Java代碼  收藏代碼
  1. package com.logcd.servlet;  
  2.   
  3. import java.io.IOException;  
  4. import java.io.InputStream;  
  5. import java.io.OutputStream;  
  6. import java.sql.CallableStatement;  
  7. import java.sql.Connection;  
  8. import java.sql.DriverManager;  
  9. import java.sql.ResultSet;  
  10. import java.sql.SQLException;  
  11. import java.sql.Statement;  
  12. import java.sql.Types;  
  13. import java.util.Iterator;  
  14. import java.util.List;  
  15.   
  16. import javax.servlet.ServletException;  
  17. import javax.servlet.http.HttpServlet;  
  18. import javax.servlet.http.HttpServletRequest;  
  19. import javax.servlet.http.HttpServletResponse;  
  20.   
  21. import oracle.sql.BLOB;  
  22.   
  23. import org.apache.commons.fileupload.FileItem;  
  24. import org.apache.commons.fileupload.FileUploadException;  
  25. import org.apache.commons.fileupload.disk.DiskFileItemFactory;  
  26. import org.apache.commons.fileupload.servlet.ServletFileUpload;  
  27.   
  28. public class ImageServlet extends HttpServlet {  
  29.   
  30.     private static final long serialVersionUID = 1L;  
  31.   
  32.     /** 
  33.      * 處理請求 
  34.      * @throws FileUploadException 
  35.      */  
  36.     public void doPost(HttpServletRequest request, HttpServletResponse response)  
  37.             throws ServletException, IOException {  
  38.   
  39.         Iterator<FileItem> i = getFileItem(request);  
  40.         String title = "";  
  41.         byte[] data = null;  
  42.   
  43.         while (i.hasNext()) {  
  44.             FileItem fi = (FileItem) i.next();  
  45.             if (fi.isFormField()) {// 取得表單域  
  46.                 if(fi.getFieldName().equalsIgnoreCase("title")){  
  47.                               title = new String(fi.getString().getBytes("iso8859-1"),"gbk");  
  48.                     }  
  49.             } else {// 取文件域  
  50.                 data = fi.get();//文件二進制數據  
  51.             }  
  52.         }  
  53.   
  54.         Integer id = saveImageUseProc(data,title);//saveImage(data, title);//存入   
  55.         //outputImage(response, id);//讀出  
  56.         outputImageUseProc(response,id);  
  57.     }  
  58.   
  59.     public void doGet(HttpServletRequest request, HttpServletResponse response)  
  60.             throws ServletException, IOException {  
  61.         doPost(request, response);  
  62.     }  
  63.   
  64.     /** 
  65.      * 通過SQL保存圖片 
  66.      * @param data 
  67.      * @param title 
  68.      */  
  69.     @SuppressWarnings("deprecation")  
  70.     public static Integer saveImage(byte[] data, String title) {  
  71.         Connection conn = getConnection();  
  72.         Integer id = (int) (Math.random() * 100000);  
  73.         String sql = "insert into t_image(id,title,image) values(" + id + ",'"  
  74.                 + title + "',empty_blob())";  
  75.         Statement stmt;  
  76.         OutputStream outStream = null;  
  77.         try {  
  78.             conn.setAutoCommit(false);// 如果不關閉會報-->"錯誤:讀取違反順序"  
  79.   
  80.             stmt = conn.createStatement();  
  81.             stmt.execute(sql);  
  82.   
  83.             String sqll = "select image from t_image where id=" + id  
  84.                     + " for update";  
  85.   
  86.             ResultSet rs = stmt.executeQuery(sqll);  
  87.             if (rs.next()) {  
  88.                 BLOB blob = (BLOB) rs.getBlob("image");  
  89.                 outStream = blob.getBinaryOutputStream();  
  90.                 // data是傳入的byte數組,定義:byte[] data  
  91.                 outStream.write(data, 0, data.length);  
  92.   
  93.                 outStream.flush();  
  94.                 outStream.close();  
  95.                 conn.commit();  
  96.             }  
  97.         } catch (Exception e) {  
  98.             try {  
  99.                 conn.rollback();  
  100.             } catch (SQLException e1) {  
  101.                 e1.printStackTrace();  
  102.             }  
  103.             e.printStackTrace();  
  104.         } finally {  
  105.             try {  
  106.                 conn.close();  
  107.             } catch (SQLException e) {  
  108.                 e.printStackTrace();  
  109.             }  
  110.         }  
  111.         return id;  
  112.   
  113.     }  
  114.   
  115.     /** 
  116.      * 調用存儲過程保存圖片 
  117.      * @param data 
  118.      * @param title 
  119.      * @return 
  120.      */  
  121.     @SuppressWarnings("deprecation")  
  122.     public static Integer saveImageUseProc(byte[] data, String title){  
  123.         Integer id = null;  
  124.         BLOB blob = null;  
  125.         OutputStream outStream;  
  126.         Connection conn = getConnection();  
  127.         try{  
  128.             conn.setAutoCommit(false);  
  129.             String call="{call OPERATE_BLOB.SAVE_BLOB_IMAGE(?,?,?)}";//調用語句  
  130.             CallableStatement proc=conn.prepareCall(call);//調用存儲過程  
  131.             proc.setString(1, title);  
  132.             proc.registerOutParameter(2, Types.BLOB);  
  133.             proc.registerOutParameter(3, Types.INTEGER);   
  134.               
  135.             proc.execute();  
  136.               
  137.             blob = (BLOB)proc.getBlob(2);  
  138.             id = proc.getInt(3);//返回結果  
  139.   
  140.             outStream = blob.getBinaryOutputStream();  
  141.             outStream.write(data, 0, data.length);  
  142.             outStream.flush();  
  143.             outStream.close();  
  144.               
  145.             proc.close();  
  146.             conn.commit();  
  147.         }catch(Exception e){  
  148.             e.printStackTrace();  
  149.         }finally{  
  150.             try {  
  151.                 conn.close();  
  152.             } catch (SQLException e) {  
  153.                 e.printStackTrace();  
  154.             }  
  155.         }  
  156.           
  157.         return id;  
  158.     }  
  159.   
  160.     /** 
  161.      * 輸出保存的圖片 
  162.      * @param response 
  163.      * @param id 
  164.      */  
  165.     public static void outputImage(HttpServletResponse response, Integer id) {  
  166.         Connection con = getConnection();  
  167.         byte[] data = null;  
  168.         try{  
  169.             Statement st = con.createStatement();  
  170.             ResultSet rs = st.executeQuery("select image from t_image where id="  
  171.                     + id);  
  172.             if (rs.next()) {  
  173.                 BLOB blob = (BLOB)rs.getBlob("image");  
  174.                 InputStream inStream = blob.getBinaryStream();  
  175.                 int bufferSize = blob.getBufferSize();  
  176.                 data = new byte[bufferSize];  
  177.                 int count = inStream.read(data, 0, bufferSize);  
  178.                 while(count != -1){//讀出字節數據  
  179.                     response.getOutputStream().write(data,0,count);  
  180.                     count = inStream.read(data, 0, bufferSize);  
  181.                 }  
  182.                 inStream.close();  
  183.             }  
  184.         }catch(Exception e){  
  185.             e.printStackTrace();  
  186.         }finally{  
  187.             try {  
  188.                 con.close();  
  189.             } catch (SQLException e) {  
  190.                 e.printStackTrace();  
  191.             }  
  192.   
  193.         }  
  194.     }  
  195.   
  196.     /** 
  197.      * 調用存儲過程輸出圖片 
  198.      * @param response 
  199.      * @param id 
  200.      */  
  201.     public static void outputImageUseProc(HttpServletResponse response, Integer id){  
  202.         Connection conn = getConnection();  
  203.         try{  
  204.             String call = "{call OPERATE_BLOB.QUERY_BLOB_IMAGE(?,?)}";  
  205.             CallableStatement proc=conn.prepareCall(call);//調用存儲過程  
  206.               
  207.             proc.setInt(1, id);  
  208.             proc.registerOutParameter(2, Types.BLOB);  
  209.               
  210.             proc.execute();  
  211.               
  212.             BLOB blob = (BLOB)proc.getBlob(2);  
  213.               
  214.             InputStream inStream = blob.getBinaryStream();  
  215.             int bufferSize = blob.getBufferSize();  
  216.             byte[] data = new byte[bufferSize];  
  217.             int count = inStream.read(data, 0, bufferSize);  
  218.             while(count != -1){//讀出字節數據  
  219.                 response.getOutputStream().write(data,0,count);  
  220.                 count = inStream.read(data, 0, bufferSize);  
  221.             }  
  222.             inStream.close();  
  223.               
  224.         }catch(Exception e){  
  225.             e.printStackTrace();  
  226.         }finally{  
  227.             try {  
  228.                 conn.close();  
  229.             } catch (SQLException e) {  
  230.                 e.printStackTrace();  
  231.             }  
  232.         }  
  233.     }  
  234.       
  235.     /** 
  236.      * 取得所有表單數據 
  237.      * @param request 
  238.      * @return 
  239.      */  
  240.     @SuppressWarnings("unchecked")  
  241.     public static Iterator<FileItem> getFileItem(HttpServletRequest request) {  
  242.         DiskFileItemFactory factory = new DiskFileItemFactory();  
  243.         factory.setSizeThreshold(4096); // 設置緩沖區大小,這里是4kb  
  244.         ServletFileUpload upload = new ServletFileUpload(factory);  
  245.         upload.setSizeMax(4194304); // 設置最大文件尺寸,這里是4MB  
  246.   
  247.         List<FileItem> items = null;  
  248.         Iterator<FileItem> i = null;  
  249.         try {  
  250.             items = upload.parseRequest(request);  
  251.             i = items.iterator();  
  252.         } catch (FileUploadException e) {  
  253.             e.printStackTrace();  
  254.         }  
  255.   
  256.         return i;  
  257.     }  
  258.   
  259.     /** 
  260.      * 取得數據庫連接 
  261.      *  
  262.      * @return 
  263.      */  
  264.     public static Connection getConnection() {  
  265.         String driver = "oracle.jdbc.driver.OracleDriver";  
  266.         String url = "jdbc:oracle:thin:@195.2.199.6:1521:orcl";  
  267.         Connection conn = null;  
  268.         try {  
  269.             Class.forName(driver);  
  270.             conn = DriverManager.getConnection(url, "testdb", "logcd");  
  271.         } catch (ClassNotFoundException e) {  
  272.             e.printStackTrace();  
  273.         } catch (SQLException ex) {  
  274.             ex.printStackTrace();  
  275.         }  
  276.         return conn;  
  277.     }  
  278.   
  279. }  

2.所用到的存儲過程
Sql代碼  收藏代碼
  1. CREATE OR REPLACE PACKAGE BODY OPERATE_BLOB AS  
  2.   
  3.   PROCEDURE  SAVE_BLOB_IMAGE(  
  4.       PC_TITLE  IN   VARCHAR2,  
  5.       PB_IMAGE  OUT   BLOB,  
  6.       PN_ID     OUT  INTEGER  
  7.     )AS  
  8.       v_id INTEGER;  
  9.   BEGIN     
  10.        SELECT nvl(MAX(id),1000) + 1 INTO v_id FROM t_image;   
  11.        PN_ID := v_id;  
  12.        INSERT INTO t_image(id,title,image) values(v_id,PC_TITLE,empty_blob())  
  13.        RETURNING image INTO PB_IMAGE;  
  14.   
  15.   END;  
  16.   
  17.   PROCEDURE QUERY_BLOB_IMAGE(  
  18.      PN_ID      IN   INTEGER,  
  19.      PB_IMAGE   OUT  BLOB  
  20.   )AS  
  21.   BEGIN  
  22.      SELECT image INTO PB_IMAGE FROM t_image WHERE id = PN_ID;    
  23.   END;  
  24.   
  25. END;  


3.web.xml配置servlet
Xml代碼  收藏代碼
  1. <servlet>  
  2.     <servlet-name>ImageServlet</servlet-name>  
  3.     <servlet-class>com.logcd.servlet.ImageServlet</servlet-class>  
  4. </servlet>  
  5. <servlet-mapping>  
  6.     <servlet-name>ImageServlet</servlet-name>  
  7.     <url-pattern>/imageServlet</url-pattern>  
  8. </servlet-mapping>  

4.在image.html頁面中調用下
Html代碼  收藏代碼
  1. <HTML>  
  2.     <HEAD>  
  3.         <TITLE>Image File</TITLE>  
  4.         <meta http-equiv="Content-Type" content="text/html; charset=gb2312">  
  5.     </HEAD>  
  6.     <FORM method="POST" encType="multipart/form-data" action="imageServlet">  
  7.         <INPUT type="text" name="title">  
  8.         <BR>  
  9.         <INPUT type="file" name="image">  
  10.         <BR>  
  11.         <INPUT type="submit" value="提交">  
  12.     </FORM>  
  13.     <BODY>  
  14.     </BODY>  
  15. </HTML> 

posted on 2012-06-19 17:42 大龍 閱讀(660) 評論(0)  編輯 收藏 引用

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美国产在线视频| 欧美日韩在线三级| 欧美国产日韩精品| 午夜精品久久| 欧美日韩国产三级| 亚洲精品免费在线| 欧美电影在线免费观看网站| 亚洲一卡久久| 欧美日韩另类视频| 精品9999| 久久久蜜桃精品| 午夜精品亚洲| 国产精品私拍pans大尺度在线 | 在线看片一区| 久久爱www久久做| 亚洲一区二区黄| 国产精品国产馆在线真实露脸| 亚洲欧洲一区二区在线观看 | av成人激情| 欧美日韩国产免费| 一区二区黄色| 99精品视频一区| 欧美天堂在线观看| 亚洲午夜一级| 亚洲欧美视频一区二区三区| 国产欧美一区在线| 欧美一区二区三区在线视频| 亚洲一区免费观看| 国产精品电影在线观看| 欧美一乱一性一交一视频| 欧美在线电影| 亚洲第一久久影院| 亚洲精品三级| 国产伦理一区| 麻豆freexxxx性91精品| 你懂的亚洲视频| 亚洲免费播放| 制服丝袜亚洲播放| 国产精品久久久久毛片软件| 99精品国产99久久久久久福利| 亚洲精品久久7777| 欧美日韩国产高清| 欧美一区二区三区四区在线观看地址 | 午夜亚洲性色福利视频| 欧美一区二区三区久久精品茉莉花 | 午夜欧美精品| 欧美亚洲一区二区在线| 亚洲国产欧美日韩另类综合| 日韩一区二区精品| 国产女人aaa级久久久级| 欧美国产精品劲爆| 国产精品一区二区在线观看网站| 久久精品国产999大香线蕉| 欧美mv日韩mv亚洲| 欧美一区二区在线观看| 免费在线欧美视频| 亚洲欧美一区二区原创| 久久久久亚洲综合| 在线亚洲精品| 久久久精品五月天| 亚洲制服欧美中文字幕中文字幕| 欧美专区亚洲专区| 一区二区三区导航| 久久久久久亚洲精品杨幂换脸 | 亚洲一区二区免费在线| 久久成人羞羞网站| 中日韩在线视频| 乱人伦精品视频在线观看| 亚洲一区免费观看| 久久在线视频| 久久精品av麻豆的观看方式| 欧美日韩播放| 亚洲二区视频| 狠狠色狠狠色综合日日小说| 亚洲无限av看| 在线一区免费观看| 男女av一区三区二区色多| 久久精品成人欧美大片古装| 欧美啪啪一区| 欧美bbbxxxxx| 在线国产欧美| 欧美在线啊v一区| 欧美在线观看视频在线| 国产精品播放| 中日韩午夜理伦电影免费| 在线亚洲自拍| 欧美日韩国产美| 亚洲精品日韩在线观看| 亚洲激情av| 狼人天天伊人久久| 欧美v亚洲v综合ⅴ国产v| 樱桃成人精品视频在线播放| 久久国产乱子精品免费女| 久久资源在线| 亚洲第一级黄色片| 欧美成人tv| 亚洲精品日韩一| 亚洲天堂免费观看| 欧美视频久久| 亚洲欧美日韩在线综合| 久久精品观看| 国产一区日韩欧美| 久久九九热免费视频| 玖玖精品视频| 亚洲国产精品一区二区久| 久久综合网hezyo| 欧美www视频| 亚洲精品国产系列| 久久久免费精品视频| 久久精品噜噜噜成人av农村| 欧美日韩国产综合网| 久久一区视频| 狠狠88综合久久久久综合网| 久久成人18免费观看| 噜噜噜91成人网| 亚洲伦理在线观看| 欧美日韩在线三级| 亚洲欧美国产日韩天堂区| 久久久精品999| 狠狠色噜噜狠狠色综合久| 免费观看成人www动漫视频| 亚洲国产精品久久| 亚洲图片欧洲图片av| 国产一区二区三区黄视频| 久久综合给合| 亚洲黄一区二区三区| 销魂美女一区二区三区视频在线| 国产一区二区三区久久| 久久亚洲私人国产精品va| 最新亚洲激情| 欧美一区二区视频在线观看2020| 狠狠v欧美v日韩v亚洲ⅴ| 欧美美女bb生活片| 欧美在线亚洲| 亚洲精品乱码久久久久久蜜桃麻豆 | 亚洲激情视频网站| 欧美一区二区三区免费看| 1000部国产精品成人观看| 欧美xart系列高清| 午夜精品亚洲| 99精品黄色片免费大全| 免费久久99精品国产| 亚洲少妇中出一区| 在线观看中文字幕不卡| 国产精品一区亚洲| 欧美黄色成人网| 久久精品视频在线看| 99国产精品| 欧美gay视频| 久久久久久亚洲精品杨幂换脸| 在线一区日本视频| 亚洲激情一区二区| 国产精品午夜在线| 欧美激情一二区| 久久久天天操| 亚洲欧美福利一区二区| 亚洲精品之草原avav久久| 女同一区二区| 久久综合婷婷| 久久不射中文字幕| 亚洲免费视频观看| 一本大道久久a久久精二百| 亚洲二区在线视频| 国产亚洲一级高清| 国产免费观看久久| 国产精品久久久久免费a∨| 欧美激情第一页xxx| 久久一区视频| 久久久夜色精品亚洲| 久久精品国产亚洲一区二区| 亚洲免费在线观看| 中国成人在线视频| 亚洲一区二区在线播放| 一区二区三区高清| 一区二区三区导航| 一本色道久久综合亚洲精品不卡| 亚洲精一区二区三区| 亚洲国产乱码最新视频| 免费高清在线视频一区·| 亚洲一区中文字幕在线观看| 亚洲乱码国产乱码精品精可以看| 亚洲高清资源综合久久精品| 麻豆精品在线观看| 免费观看欧美在线视频的网站| 乱人伦精品视频在线观看| 久久久国产精品亚洲一区 | 午夜精彩国产免费不卡不顿大片| 99精品欧美一区| 亚洲日本电影| 一本色道久久综合狠狠躁篇怎么玩 | 亚洲制服少妇| 性高湖久久久久久久久| 欧美一区二区三区久久精品茉莉花| 亚洲欧美日韩精品久久亚洲区| 亚洲欧美在线免费观看| 欧美在线视频免费播放| 久久久在线视频| 欧美激情视频一区二区三区在线播放| 欧美激情a∨在线视频播放| 亚洲人成啪啪网站|