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

大龍的博客

常用鏈接

統計

最新評論

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>
            一区二区三区偷拍| 激情久久综艺| 夜夜嗨av色一区二区不卡| 亚洲国产欧美不卡在线观看| 欧美chengren| 一区二区三区不卡视频在线观看| 亚洲激情婷婷| 国产精品免费一区二区三区在线观看 | 亚洲欧美一区二区三区在线| 亚洲视频一二三| 国产亚洲精品久久飘花| 欧美黄网免费在线观看| 欧美日韩免费精品| 久久精品夜色噜噜亚洲aⅴ| 久久综合五月| 亚洲一区二区三区在线观看视频 | 欧美激情在线观看| 欧美体内she精视频| 欧美精品一区三区| 欧美一区亚洲| 男人插女人欧美| 欧美亚洲综合另类| 欧美成人中文字幕| 久久精品国产精品亚洲综合 | 午夜日韩视频| 一区二区三区www| 久久亚洲欧洲| 欧美一区二区成人| 欧美精品一区在线播放| 久久久噜噜噜久噜久久 | 久久精品99久久香蕉国产色戒| av成人福利| 久久亚洲综合网| 久久精品国产欧美激情| 欧美视频一区二区三区…| 欧美ab在线视频| 国产亚洲在线观看| 亚洲少妇中出一区| 9人人澡人人爽人人精品| 久久国产精品99精品国产| 亚洲影视在线| 欧美人与禽猛交乱配| 欧美国产一区二区在线观看 | 日韩亚洲精品电影| 久久永久免费| 久久天天躁狠狠躁夜夜av| 国产精品久久久久久超碰| 亚洲精品1区2区| 欧美成人福利视频| 久久综合久久综合久久| 久久av在线看| 国产精品永久免费视频| 午夜欧美精品久久久久久久| 欧美精品亚洲二区| 欧美激情va永久在线播放| 精久久久久久久久久久| 午夜一级在线看亚洲| 午夜精品一区二区三区在线播放| 欧美三区免费完整视频在线观看| 亚洲国产另类 国产精品国产免费| 狠狠色丁香婷婷综合| 久久激情网站| 免费久久99精品国产自| 尤物yw午夜国产精品视频| 久久久久久久久岛国免费| 免费成人美女女| 亚洲国产欧美在线| 欧美成人一区二区| 亚洲美女在线观看| 亚洲一区二区三区在线播放| 国产精品免费电影| 欧美亚洲自偷自偷| 欧美xart系列在线观看| 亚洲精品久久久蜜桃| 欧美日韩一区二区视频在线观看| 99精品欧美一区| 久久久7777| 亚洲毛片在线看| 国产精品久久久久久久免费软件 | 在线亚洲精品| 久久人人爽人人爽| 亚洲免费观看在线观看| 欧美性事在线| 欧美在线观看视频| 亚洲高清在线| 亚洲欧美综合网| 一区二区三区在线视频播放| 欧美激情按摩| 亚洲欧美日韩在线一区| 免费在线一区二区| 亚洲一区免费视频| 激情久久久久久久久久久久久久久久| 欧美大片网址| 欧美一区二区大片| 亚洲精品一线二线三线无人区| 亚洲欧美日韩成人| 亚洲国产精品黑人久久久| 亚洲欧美电影在线观看| 免费短视频成人日韩| 亚洲欧美日韩成人| 91久久精品日日躁夜夜躁欧美| 国产精品yjizz| 美女网站久久| 性做久久久久久免费观看欧美| 亚洲国产成人久久综合| 久久9热精品视频| 一区二区电影免费观看| 国内自拍一区| 国产精品嫩草久久久久| 欧美成人一品| 久久久女女女女999久久| 亚洲午夜精品| 亚洲精品国产品国语在线app| 久久亚洲色图| 久久精品久久综合| 亚洲一区二区不卡免费| 亚洲精品一区在线观看| 狠狠久久婷婷| 国产欧美日韩视频| 国产精品第一区| 欧美日韩精品一区二区三区| 免费成人高清| 老司机成人在线视频| 久久激情综合| 欧美一区二区三区久久精品茉莉花 | 国产精品99久久久久久久女警| 影音先锋久久久| 国外成人免费视频| 韩日精品中文字幕| 国产在线精品自拍| 国产香蕉97碰碰久久人人| 国产精品日韩在线播放| 国产精品久久久久久久久久尿 | 激情欧美丁香| 国产综合色在线视频区| 国产一区在线播放| 很黄很黄激情成人| 一区二区三区在线免费播放| 狠狠色狠色综合曰曰| 在线欧美福利| 亚洲精品免费网站| 99视频在线观看一区三区| 夜色激情一区二区| 亚洲女爱视频在线| 欧美伊人久久大香线蕉综合69| 欧美亚洲自偷自偷| 久久色在线播放| 欧美承认网站| 亚洲人成久久| 亚洲深夜激情| 欧美一区亚洲| 免费亚洲一区| 欧美色图首页| 国产人成精品一区二区三| 国产主播一区二区三区四区| 在线观看91精品国产麻豆| 亚洲精品久久久久久一区二区| 99热免费精品| 欧美一级夜夜爽| 男女激情视频一区| 91久久精品一区二区三区| 日韩一区二区久久| 欧美亚洲综合网| 毛片av中文字幕一区二区| 欧美日韩免费高清| 国产在线拍偷自揄拍精品| 亚洲精美视频| 亚洲欧美日韩一区二区在线| 久久青青草原一区二区| 91久久国产综合久久91精品网站| 在线亚洲免费视频| 久久久久久久久久码影片| 欧美激情按摩| 红桃视频成人| 亚洲婷婷综合色高清在线| 久热精品视频| 亚洲一区免费视频| 欧美二区在线播放| 国产日韩欧美综合一区| 亚洲蜜桃精久久久久久久| 久久国产精品第一页| 亚洲人成77777在线观看网| 欧美亚洲尤物久久| 欧美视频免费在线观看| 亚洲国产va精品久久久不卡综合| 亚洲综合第一| 亚洲欧洲美洲综合色网| 欧美有码在线视频| 国产精品成人av性教育| 亚洲国产另类久久久精品极度 | 亚洲激情欧美| 久久久久综合网| 亚洲女同精品视频| 欧美日韩精品免费观看视频完整| 在线成人h网| 久久国产精品一区二区三区四区| 亚洲免费高清| 欧美精品一区二区三区蜜桃| 亚洲电影在线免费观看| 久久久亚洲午夜电影|