`
Fangrn
  • 浏览: 822805 次
  • 性别: 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 服务器巡检工程

    3. **磁盘空间检查**:Java的`java.io.File`类提供了获取文件或目录大小的方法,通过遍历各个磁盘分区,可以得到磁盘的总空间、已用空间和剩余空间。 4. **网络连接状态**:Java的`java.net`包提供了`Socket`和`...

    Oracle自动备份压缩

    4. **清理过期备份文件**:脚本还包含了一个循环结构,用于遍历备份目录中的所有文件,根据设定的保留天数(`iDays`)删除超过该期限的旧备份文件,以释放磁盘空间,保持备份目录的整洁和高效。 #### 关键知识点...

    oracle编程艺术代码

    4. 参数文件:定义数据库的各种配置参数,如内存结构大小、磁盘空间等。 5. 实例:由Oracle进程和SGA(System Global Area)组成,负责处理数据库的内存管理和I/O操作。 二、Oracle编程艺术 Oracle编程艺术涵盖了...

    Oracle 导出excel npoi

    本教程将指导新手如何使用C#和.NET框架,结合Npoi库从Oracle数据库中读取数据并将其导出到Excel文件。首先,你需要确保已经在项目中引用了Npoi库。你可以通过NuGet包管理器来安装Npoi,输入命令`Install-Package ...

    java_北京大学讲义

    Java是一种广泛使用的面向对象的编程语言,由Sun Microsystems(后被Oracle收购)于1995年推出。它以其“一次编写,到处运行”的特性而闻名,因为Java程序可以在任何安装了Java虚拟机(JVM)的平台上运行。这使得...

    oracle面试题集锦

    5. Oracle的主要文件类型: - 数据文件:存储表、索引等数据库对象。 - 日志文件:记录数据库的所有更改。 - 控制文件:跟踪数据库状态,用于恢复和备份。 6. Oracle数据库优化: - 物理优化:包括硬件选择、...

    Berkeley_DB_Java_Edition_使用手册

    用户可以从Oracle官网下载Berkeley DB Java Edition,并将其jar文件添加到Java环境类路径中。随包附带的帮助文档和源代码可供进一步学习和参考。 **常见的JE异常**: - `DatabaseNotFoundException`:当尝试访问未...

    哈工大java 课件

    Java是一种广泛使用的面向对象的编程语言,由Sun Microsystems(现为Oracle公司的一部分)于1995年发布。它的设计目标是具有高级功能、简单性、健壮性、安全性、可移植性、高性能和多线程特性。在“哈工大java 课件...

    Oracle笔记(基于尚学堂马士兵)

    安装Oracle需要规划合理的服务器硬件配置,包括内存、磁盘空间和CPU资源。安装过程中,需要选择正确的版本(如企业版、标准版等),并进行数据库实例创建、监听配置、网络服务命名等步骤。此外,还要设置环境变量,...

    oracle数据库中批量插入问题

    1. **使用SQL*Loader工具**:这是一种批处理工具,可以从外部文件中批量加载数据到Oracle表中。它支持多种数据格式,并能够处理复杂的转换规则。 2. **使用PL/SQL或外部编程语言(如C#、Java等)**:通过编程接口...

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

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

    java必备知识点大全.pdf

    Java必备知识点大全的内容非常丰富,涵盖了Java语言的基础知识、常用的框架以及数据库的应用等方面,是每一个Java开发者学习和面试时的重要参考。下面是对文档中各个知识点的详细解析。 基础篇: JDK常用的包:Java...

    oracle基础

    Oracle的编程语言,扩展了SQL的功能,允许编写流程控制语句、处理异常、调用存储过程等。 - **块(Block)**:PL/SQL的基本结构,包括声明部分、执行部分和异常处理部分。 - **变量(Variable)**:用于存储数据...

    jdk 1.7.0.80免安装版

    JDK 1.7.0.80是Oracle公司发布的一个特定版本,它包含了Java编译器、Java运行环境、调试工具和其他必要的库,使得开发者可以在无需正式安装过程的情况下进行Java开发。 ### JDK 1.7 版本特性 1. **类型推断**:...

    java链接数据库

    数据库则是集中存储数据的地方,通常存储在磁盘文件中。使用数据库的好处包括数据共享、存储效率高和数据安全。常见的数据库厂商有大型企业级的Oracle和中小企业常用的MySQL。 MySQL社区版本的安装过程包括下载安装...

    嵌入式数据库SQlite和JAVA

    4. **单文件数据库**:整个数据库存储在一个单独的磁盘文件中,易于备份和迁移。 5. **大文件支持**:数据库文件最大可达2TB。 6. **高性能**:对于大多数常用操作而言,SQLite的表现甚至优于一些客户端/服务器...

    Oracle PL/SQL by Example(4th Edition)

    在阅读《Oracle PL/SQL by Example(4th Edition)》的PDF文件时,建议按照章节顺序逐步学习,同时动手实践书中的示例,这将极大地促进对PL/SQL语言的理解和应用。此外,结合实际的Oracle数据库环境进行练习,能更好地...

Global site tag (gtag.js) - Google Analytics