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

大龍的博客

常用鏈接

統計

最新評論

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 大龍 閱讀(664) 評論(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>
            国产精品高清免费在线观看| 99这里只有久久精品视频| 一区在线播放| 黄色成人av在线| 韩国成人精品a∨在线观看| 国产亚洲成av人片在线观看桃| 国产美女一区| 国精品一区二区| 亚洲大片在线| 一区二区三区回区在观看免费视频| 一区二区日韩伦理片| 亚洲午夜激情免费视频| 久久黄金**| 欧美激情欧美激情在线五月| 久久偷窥视频| 亚洲精选中文字幕| 欧美一区二区三区的| 噜噜爱69成人精品| 欧美视频在线视频| 伊人久久婷婷色综合98网| 亚洲免费成人| 久久精品一区中文字幕| 亚洲日韩视频| 亚洲欧美激情一区二区| 麻豆亚洲精品| 国产香蕉久久精品综合网| 亚洲欧洲视频在线| 久久精品视频在线免费观看| 亚洲三级免费| 久久美女性网| 国产农村妇女毛片精品久久麻豆 | 亚洲校园激情| 久久综合色影院| 国产精品无码永久免费888| 樱桃国产成人精品视频| 亚洲欧美在线免费| 亚洲免费观看高清在线观看 | 欧美丰满高潮xxxx喷水动漫| 欧美四级剧情无删版影片| 曰韩精品一区二区| 欧美在线视频在线播放完整版免费观看| 美乳少妇欧美精品| 亚洲天堂黄色| 欧美日韩国产三级| 久久精品中文| 国产精品乱子久久久久| 亚洲最新视频在线| 欧美激情视频给我| 久久精品国产久精国产一老狼| 国产精品福利影院| 中日韩午夜理伦电影免费| 欧美激情一区二区三区在线| 欧美一区二区免费| 国产精品网站在线播放| 亚洲在线免费观看| 99精品99| 欧美日韩激情网| 中文日韩欧美| 亚洲精品中文字幕在线| 欧美xxxx在线观看| 亚洲精品免费在线观看| 欧美.com| 欧美成人高清| 日韩亚洲精品在线| 日韩视频一区二区三区| 欧美日韩国产123| 亚洲深夜av| 亚洲午夜av在线| 国产精品永久免费在线| 欧美一区二区视频网站| 亚洲直播在线一区| 国外成人在线| 亚洲国产高清自拍| 欧美午夜片欧美片在线观看| 午夜国产不卡在线观看视频| 亚洲欧美日产图| 国产综合自拍| 亚洲国产日韩欧美在线图片| 欧美精品一区三区在线观看| 在线一区二区三区四区| 亚洲在线免费| 亚洲国产精品久久| 在线性视频日韩欧美| 国产一区二区三区四区三区四| 免费高清在线视频一区·| 欧美大片国产精品| 午夜一区不卡| 另类欧美日韩国产在线| 亚洲一区二区三区在线观看视频| 亚洲欧美999| 亚洲人成欧美中文字幕| 亚洲午夜91| 亚洲人成人77777线观看| 亚洲一区影音先锋| 91久久在线视频| 午夜久久美女| 99精品久久久| 久久精视频免费在线久久完整在线看| 亚洲日本黄色| 性色av一区二区三区在线观看| 亚洲国产一区视频| 亚洲欧美日韩国产| 亚洲激情成人| 欧美一区二区三区在线免费观看| 日韩视频―中文字幕| 欧美一区二区三区啪啪| 一区二区三区波多野结衣在线观看| 欧美一区二区免费观在线| 欧美mv日韩mv国产网站| 欧美一区影院| 欧美日韩天天操| 欧美www视频| 国产一区二区三区网站| 一区二区三区蜜桃网| 亚洲精品美女| 久久亚洲欧美| 久久久亚洲成人| 国产精品腿扒开做爽爽爽挤奶网站| 亚洲成人在线视频播放 | 欧美在线www| 亚洲一区二区三区激情| 欧美不卡三区| 麻豆成人在线| 国产一区二区高清视频| 亚洲一区二区三区激情| 在线视频日本亚洲性| 麻豆精品在线视频| 麻豆精品91| 黄色一区二区在线观看| 亚欧成人在线| 久久裸体视频| 国产日韩欧美一区二区三区在线观看 | 亚洲精品视频在线观看网站 | 亚洲欧洲综合另类| 久久久av毛片精品| 久久久久九九九九| 国产一区白浆| 欧美在线视频一区二区| 午夜精品一区二区三区在线播放| 欧美精选午夜久久久乱码6080| 欧美大片在线观看一区| 在线免费观看日本一区| 久久久亚洲午夜电影| 欧美成人一区二区| 亚洲精品少妇网址| 欧美日韩视频专区在线播放 | 99视频在线精品国自产拍免费观看| 91久久精品国产| 欧美成人情趣视频| 91久久线看在观草草青青| 亚洲精品中文在线| 欧美日韩免费观看一区三区| 99国内精品久久久久久久软件| 正在播放亚洲一区| 国产精品每日更新在线播放网址| 亚洲影院高清在线| 久久久亚洲人| 欧美福利视频网站| 亚洲国产美女久久久久| 夜夜嗨av一区二区三区| 国产精品久久久久久一区二区三区| 亚洲欧美在线一区| 免费人成精品欧美精品| aⅴ色国产欧美| 国产视频在线观看一区 | 亚洲激情一区二区三区| 在线视频欧美日韩| 国产一区视频网站| 欧美风情在线| 午夜精品短视频| 欧美大片免费久久精品三p | 亚洲另类黄色| 久久成人国产| 亚洲精品久久久久| 国产精品久久久久婷婷| 久久九九热re6这里有精品| 亚洲国产精选| 欧美在线观看视频一区二区| 亚洲大胆美女视频| 国产精品久久久久aaaa| 葵司免费一区二区三区四区五区| 日韩视频在线一区二区| 噜噜爱69成人精品| 小黄鸭精品aⅴ导航网站入口| 在线观看免费视频综合| 欧美三级午夜理伦三级中视频| 久久九九免费视频| 午夜精品福利一区二区蜜股av| 亚洲日韩成人| 欧美国产日韩一二三区| 欧美主播一区二区三区| 在线视频精品一区| 亚洲免费观看高清在线观看| 尹人成人综合网| 国产亚洲福利社区一区| 国产精品xvideos88| 欧美黑人在线观看| 免费成人黄色av| 麻豆成人91精品二区三区| 欧美一级在线亚洲天堂|