`
Fangrn
  • 浏览: 800185 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

oracle调用java类遍历磁盘文件

    博客分类:
  • j2ee
阅读更多

利用oracle自带的utl_file包可以访问磁盘文件,但有个限制-- 无法访问文件夹?什么意思呢?就是说oracle只能访问指定的文件,而不能访问文件夹下的未知文件。所以,如果要通过oracle去遍历某指定路径下的 所有文件,sorry, impossible! 但是,有一种替代方案可以助你一臂之力!


众所周知java之File类指向的可以是目录也可以是文件,如果指向目录,可以用file.list()找到包含的文件及目录,so that,我可以用java来遍历文件,然后返回一个值给oracle再进行后续操作。


Come on, let's talk about this case!

oracle调用java可以分三个步骤:
第一步:在PLSQL客户端里写java代码(类及方法),实现oracle无法做的工作或你想要让java做的工作;

  1. --功能:返回所有文件字段串  
  2. create or replace and compile java source named file_list as  
  3. import  java.io.File;  
  4. public   class  file_list  
  5. {  
  6.   public   static  String entry(String path)  
  7.   {  
  8.     StringBuffer resultBuffer = new  StringBuffer();  
  9.     try {  
  10.       File file = new  File( "I:\\" +path);  
  11.       resultBuffer.append(file.getAbsolutePath());  
  12.       String[] files = file.list();  
  13.         
  14.       resultBuffer.append("----" );  
  15.       for ( int  i= 0 ; i<files.length; i++){  
  16.           StringBuffer fileStr = new  StringBuffer( "<P align='center'><IMG src=" http: //www.qdda.gov.cn/");   
  17.           fileStr.append(path.replace(" mce_src=" http: //www.qdda.gov.cn/");   
  18.           fileStr.append(path.replace("\\', ' /'));  
  19.           fileStr.append(files[i]);  
  20.           fileStr.append("'></P>" );      
  21.           resultBuffer.append(fileStr.toString());  
  22.       }  
  23.     }catch (Exception ex){  
  24.       resultBuffer.append("----" );  
  25.       resultBuffer.append(ex);  
  26.     }      
  27.     return  resultBuffer.toString();      
  28.   }  
  29. }  


第二步:写oracle函数(function),调用java类方法;

  1. create or replace function func_file_list(path in varchar2)  return  varchar2  as  
  2. language java name 'file_list.entry(java.lang.String) return java.lang.String'  ;  

第三步:写oracle存储过程(procedure)或客户端调用程序;

  1. create or replace procedure proce_transfer_data as  
  2.  url varchar2(100 );  
  3.  path varchar2(100 );  
  4.  img_url varchar2(2000 );  
  5. --档案公布带图数据  
  6.   cursor cur1 is  
  7.    select * from ARCHIVE_PUBLICATION t where t.big_event_id is null  and t.appendix_numb >  0  and t.publish_order is not  null ;  
  8.   r1 ARCHIVE_PUBLICATION%rowtype;  
  9. begin  
  10.   open cur1;  
  11.     loop  
  12.       fetch cur1 into r1;            
  13.       exit when cur1%notfound;  
  14.       --找出重复的数据   
  15.          
  16.       --图片目录  
  17.       if  r1.publish_order is  null  then         
  18.         path :=  'archives_files\' || substr(r1.archive_no, 1, 5) || ' \ '  || substr(r1.archive_no, 6, 3)  || ' \' ||   
  19.         substr(r1.archive_no, 9 5 )||  '\'  ||  substr(r1.archive_no, 14, 4) || ' \';  
  20.       else    
  21.         path := 'archives_files\ziliao\' || r1.publish_order || ' \';        
  22.       end if ;  
  23.       --dbms_output.put_line(path);  
  24.      --授权  
  25.      dbms_java.grant_permission( 'QDDA' 'SYS:java.io.FilePermission' 'I:\archives_files\', ' READ' );  
  26.         
  27.       --图片路径  
  28.       img_url := func_file_list(path);         
  29.      dbms_output.put_line(r1.id || img_url);  
  30.         
  31.       update subject_articles t set t.content = img_url || r1.content||',' ||r1.file_dz|| ',' ||r1.archive_no|| ',' ||r1.file_no,   
  32.        t.secondid = '12466747755782031001' , t.rootid= '12264731996871389001' , t.area =  'qd'   
  33.         where t.id = r1.id;    
  34.       commit  ;      
  35.     end loop;  
  36.       
  37.   close cur1;  
  38.   commit;   
  39.     
  40. end proce_transfer_data; 

分享到:
评论
2 楼 Fangrn 2012-07-22  
oracle已经包含java运行环境了
1 楼 yechk 2012-05-07  
能具体说明下 java 如何安装么?

相关推荐

    JAVA上百实例源码以及开源项目

     Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...

    JAVA上百实例源码以及开源项目源代码

     Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...

    Java开发实战1200例(第1卷).(清华出版.李钟尉.陈丹丹).part3

    实例157 动态调用类中的方法 204 实例158 动态实例化类 205 实例159 创建长度可变的数组 206 实例160 利用反射重写toString()方法 208 实例161 反射与动态代理 209 7.3 常见的未检查型异常 210 实例162 算数异常 210...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    ORACLE用户是学习ORACLE数据库中的基础知识,下面就介绍下类系统常用的默认ORACLE用户: 1. sys用户:超级用户,完全是个SYSDBA(管理数据库的人)。拥有dba,sysdba,sysoper等角色或权限。是oracle权限最高的用户,...

    PHP开发实战1200例(第1卷).(清华出版.潘凯华.刘中华).part1

    实例254 遍历、删除指定目录下的所有文件 330 第5章 会话应用 333 5.1 COOKIE 334 实例255 控制登录用户的过期时间 334 实例256 自动登录 335 实例257 单击登录 336 实例258 统计用户在线时间 339 实例259 限制用户...

    PHP开发实战1200例(第1卷).(清华出版.潘凯华.刘中华).part2

    实例254 遍历、删除指定目录下的所有文件 330 第5章 会话应用 333 5.1 COOKIE 334 实例255 控制登录用户的过期时间 334 实例256 自动登录 335 实例257 单击登录 336 实例258 统计用户在线时间 339 实例259 限制用户...

    vc++ 应用源码包_1

    使用了六个类五个模块类演示了atl的调用方法 autoplaysnd mp3 播放器源码 重载了自带的控件进行播放 aviplayer avi播放器源码 引用了atl控件播放 beautifulskin 源码 演示了各种控件方法 Browser.Net源码 C#的一...

    vc++ 应用源码包_2

    使用了六个类五个模块类演示了atl的调用方法 autoplaysnd mp3 播放器源码 重载了自带的控件进行播放 aviplayer avi播放器源码 引用了atl控件播放 beautifulskin 源码 演示了各种控件方法 Browser.Net源码 C#的一...

    vc++ 应用源码包_6

    使用了六个类五个模块类演示了atl的调用方法 autoplaysnd mp3 播放器源码 重载了自带的控件进行播放 aviplayer avi播放器源码 引用了atl控件播放 beautifulskin 源码 演示了各种控件方法 Browser.Net源码 C#的一...

    vc++ 应用源码包_5

    使用了六个类五个模块类演示了atl的调用方法 autoplaysnd mp3 播放器源码 重载了自带的控件进行播放 aviplayer avi播放器源码 引用了atl控件播放 beautifulskin 源码 演示了各种控件方法 Browser.Net源码 C#的一...

    vc++ 应用源码包_3

    使用了六个类五个模块类演示了atl的调用方法 autoplaysnd mp3 播放器源码 重载了自带的控件进行播放 aviplayer avi播放器源码 引用了atl控件播放 beautifulskin 源码 演示了各种控件方法 Browser.Net源码 C#的一...

    vc++ 开发实例源码包

    使用了六个类五个模块类演示了atl的调用方法 class CDHtmlSinkHandler; // Events Sink Base class CDHtmlEventSink; // IHTMLDocument2 Events Sink // IDispatch class CDHtmlControlSink; // ActiveX Control ...

    C#.net_经典编程例子400个

    89 2.8 TreeView控件应用 91 实例073 将数据库数据显示到树视图中 91 实例074 用TreeView控件制作导航界面 93 实例075 用TreeView控件遍历磁盘目录 94 实例076 TreeView控件在数据库中的...

    C#程序开发范例宝典(第2版).part13

    实例078 用TreeView控件遍历磁盘目录 102 实例079 修改TreeView控件中的节点 105 实例080 将XML文件节点绑定到TreeView控件中 106 2.8 DataGridView控件应用 108 实例081 DataGridView控件的分页功能 108 实例...

Global site tag (gtag.js) - Google Analytics