使用存储过程实现oracle存图片的方法

oracle存图片是我们经常需要实现的功能,下面就教您一个使用存储过程实现oracle存图片的方法,如果您在oracle存图片方面遇到过问题,不妨一看。

要在oracle存图片 用blob类型,首先在数据库里建立:

–连接到管理员

  1. conn sys/tbsoft as sysdba; 

–为scott用户授权

  1. grant create any directory to scott; 

–回到scott用户

  1. conn scott/tiger; 

–创建存储图片的表

  1. CREATE TABLE IMAGE_LOB (T_ID VARCHAR2 (5) NOT NULL,T_IMAGE BLOB NOT NULL); 

–创建存储图片的目录

  1. CREATE OR REPLACE DIRECTORY IMAGES AS 'C:\picture'; 

–在c:下自己建一个叫picture的文件夹

  1. CREATE OR REPLACE PROCEDURE IMG_INSERT (TID VARCHAR2,FILENAME VARCHAR2) AS 

F_LOB BFILE;–文件类型

B_LOB BLOB;

 

  1. BEGIN     
  2. iNSERT INTO IMAGE_LOB (T_ID, T_IMAGE)     
  3. VALUES (TID,EMPTY_BLOB ()) RETURN T_IMAGE INTO B_LOB    

 

–插入空的blob

  1. F_LOB:BFILENAME ('IMAGES', FILENAME); 

–获取指定目录下的文件

  1. DBMS_LOB.FILEOPEN(F_LOB, DBMS_LOB.FILE_READONLY); 

–以只读的方式打开文件

  1. DBMS_LOB.LOADFROMFILE (B_LOB, F_LOB,DBMS_LOB.GETLENGTH (F_LOB)); 

–传递对象

  1. DBMS_LOB.FILECLOSE (F_LOB); 

–关闭原始文件

  1. COMMIT;  
  2. END;  
  3. /  

–在C:\picture下放一张图片1.gif

–将该图片存入表

  1. call IMG_INSERT('1','1.gif'); 

然后创建一个web项目 连接数据库后 创建一个BlobDAO类 用来取出表中的blob类型图片

  1. public class BlobDAO {  
  2.     private static final BlobDAO instance = new BlobDAO();  
  3.     private Connection conn = null;  
  4.     private BlobDAO() {  
  5.     }  
  6.     public static BlobDAO getInstance() {  
  7.         return instance;  
  8.     }  
  9.     private void initConn() {  
  10.         conn = DBAccess.getInstance().getConn();  
  11.     }  
  12.     public byte[] getImage(String imgname) {  
  13.         BufferedInputStream ins;//取得BLOB的IO流  
  14.         byte[] bt = null;  
  15.         initConn();  
  16.         Blob bo = null;  
  17.         PreparedStatement ps = null;  
  18.         ResultSet rs = null;  
  19.         String sql = "select T_IMAGE from IMAGE_LOB where t_id=?";  
  20.         try {  
  21.               ps = conn.prepareStatement(sql);  
  22.               ps.setString(1, imgname);  
  23.               rs = ps.executeQuery();  
  24.               if (rs.next()) {  
  25.                   bo = rs.getBlob("T_IMAGE");  
  26.                   try {  
  27.                       ins = new BufferedInputStream(bo.getBinaryStream());  
  28.                       int bufferSize = (int) bo.length();//取得BLOB的长度  
  29.                       bt = new byte[bufferSize];  
  30.                       try {  
  31.                             ins.read(bt, 0, bufferSize);  
  32.                       } catch (IOException e) {  
  33.                             // TODO Auto-generated catch block  
  34.                             e.printStackTrace();  
  35.                       }  
  36.                       //建立字节缓存  
  37.                   } catch (SQLException e) {  
  38.                       // TODO Auto-generated catch block  
  39.                       e.printStackTrace();  
  40.                   }  
  41.               }  
  42.         } catch (SQLException e) {  
  43.               // TODO Auto-generated catch block  
  44.               e.printStackTrace();  
  45.         } finally {  
  46.               try {  
  47.                   rs.close();  
  48.                   ps.close();  
  49.                   conn.close();  
  50.               } catch (SQLException e) {  
  51.                   // TODO Auto-generated catch block  
  52.                   e.printStackTrace();  
  53.               }  
  54.         }  
  55.         return bt;  
  56.     }  
  57. }  
  58.  

在action里面调用getImage()方法并显示图片在页面上

  1. public ActionForward execute(ActionMapping mapping, ActionForm form,  
  2.               HttpServletRequest request, HttpServletResponse response) {  
  3.         // TODO Auto-generated method stub  
  4.              BlobDAO blobDAO = BlobDAO.getInstance();  
  5.         byte[] bs = blobDAO.getImage("1");  
  6.  
  7.         try {  
  8.  
  9.               response.getOutputStream().write(bs);  
  10.         } catch (IOException e) {  
  11.               // TODO Auto-generated catch block  
  12.               e.printStackTrace();  
  13.         }  
  14.         return null;  
  15.     }  

添加图片到数据库

请在c盘下放入图片–c:\\4.gif

  1. public void savaImg(String imgId) {  
  2.            //传的是存入数据库图片的id  
  3.            initConn();  
  4.            Statement st = null;  
  5.            BLOB blob = null; //图片类型  
  6.            OutputStream outputStream = null; //输出流  
  7.            File file = null; //文件  
  8.            InputStream inputStream = null; //输入流  
  9.            ResultSet rs = null;  
  10.            try {  
  11.                  conn.setAutoCommit(false); //事物由程序员操作  
  12.                  st = conn.createStatement();  
  13.                  st.executeQuery("insert into IMAGE_LOB values('"+ imgId +"',empty_blob())");  
  14.                  rs = st.executeQuery("select T_IMAGE from IMAGE_LOB where t_id='"+ imgId +"' for update");  
  15.                  if (rs.next()) {  
  16.                        blob = (BLOB) rs.getBlob(1);  
  17.                        outputStream = blob.getBinaryOutputStream();  
  18.                        file = new File("c:\\4.gif");  
  19.                        inputStream = new FileInputStream(file);  
  20.                        byte[] b = new byte[blob.getBufferSize()];  
  21.                        int len = 0;  
  22.                        while ((len = inputStream.read(b)) != -1) {  
  23.                              System.out.println(len);  
  24.                              outputStream.write(b, 0, len);  
  25.                        }  
  26.                  }  
  27.            } catch (SQLException e) {  
  28.                  // TODO Auto-generated catch block  
  29.                  e.printStackTrace();  
  30.            } catch (FileNotFoundException e) {  
  31.                  // TODO Auto-generated catch block  
  32.                  e.printStackTrace();  
  33.            } catch (IOException e) {  
  34.                  // TODO Auto-generated catch block  
  35.                  e.printStackTrace();  
  36.            } finally {  
  37.                  try {  
  38.                        inputStream.close();  
  39.                        outputStream.flush();  
  40.                        outputStream.close();  
  41.                        rs.close();  
  42.                        st.close();  
  43.                        conn.commit();  
  44.                        conn.close();  
  45.                  } catch (IOException e) {  
  46.                        // TODO Auto-generated catch block  
  47.                        e.printStackTrace();  
  48.                  } catch (SQLException e) {  
  49.                        // TODO Auto-generated catch block  
  50.                        e.printStackTrace();  
  51.                  }  
  52.            }  
  53.      }  
  54.  
  55.    

 

 

 

【编辑推荐】

oracle树查询的实现

oracle查询当前时间的实现

带您了解Oracle层次查询

带您深入了解Oracle临时表

Oracle with语句的用法

 

文章来源网络,作者:运维,如若转载,请注明出处:https://shuyeidc.com/wp/244575.html<

(0)
运维的头像运维
上一篇2025-04-25 19:15
下一篇 2025-04-25 19:16

相关推荐

  • 个人主题怎么制作?

    制作个人主题是一个将个人风格、兴趣或专业领域转化为视觉化或结构化内容的过程,无论是用于个人博客、作品集、社交媒体账号还是品牌形象,核心都是围绕“个人特色”展开,以下从定位、内容规划、视觉设计、技术实现四个维度,详细拆解制作个人主题的完整流程,明确主题定位:找到个人特色的核心主题定位是所有工作的起点,需要先回答……

    2025-11-20
    0
  • 社群营销管理关键是什么?

    社群营销的核心在于通过建立有温度、有价值、有归属感的社群,实现用户留存、转化和品牌传播,其管理需贯穿“目标定位-内容运营-用户互动-数据驱动-风险控制”全流程,以下从五个维度展开详细说明:明确社群定位与目标社群管理的首要任务是精准定位,需明确社群的核心价值(如行业交流、产品使用指导、兴趣分享等)、目标用户画像……

    2025-11-20
    0
  • 香港公司网站备案需要什么材料?

    香港公司进行网站备案是一个涉及多部门协调、流程相对严谨的过程,尤其需兼顾中国内地与香港两地的监管要求,由于香港公司注册地与中国内地不同,其网站若主要服务内地用户或使用内地服务器,需根据服务器位置、网站内容性质等,选择对应的备案路径(如工信部ICP备案或公安备案),以下从备案主体资格、流程步骤、材料准备、注意事项……

    2025-11-20
    0
  • 如何企业上云推广

    企业上云已成为数字化转型的核心战略,但推广过程中需结合行业特性、企业痛点与市场需求,构建系统性、多维度的推广体系,以下从市场定位、策略设计、执行落地及效果优化四个维度,详细拆解企业上云推广的实践路径,精准定位:明确目标企业与核心价值企业上云并非“一刀切”的方案,需先锁定目标客户群体,提炼差异化价值主张,客户分层……

    2025-11-20
    0
  • PS设计搜索框的实用技巧有哪些?

    在PS中设计一个美观且功能性的搜索框需要结合创意构思、视觉设计和用户体验考量,以下从设计思路、制作步骤、细节优化及交互预览等方面详细说明,帮助打造符合需求的搜索框,设计前的规划明确使用场景:根据网站或APP的整体风格确定搜索框的调性,例如极简风适合细线条和纯色,科技感适合渐变和发光效果,电商类则可能需要突出搜索……

    2025-11-20
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注