Oracle 调用 JAVA 实战(通过 Oracle 存储过程读取服务器目录)

首先,声明下次方法不是用来攻破服务器用的,只是为了学习如何用 Oracle 存储过程调用 JAVA 罢了。不过一些局域网应用系统使用 Oracle 作为数据存储工具时为了实现一些功能也许也会用到。此方法是在盖国强大神的《循序渐进Oracle  数据库管理、优化与备份恢复》偷学过来的 ^_^

Orale 表及存储过程

1. 首先创建个临时表 

CREATE GLOBAL TEMPORARY TABLE OS_DIR(
       name VARCHAR2(255),
       size_byte NUMBER,
       modify_date DATE) ON COMMIT PRESERVE ROWS;
2.. Oracle JAVA Resource

CREATE OR REPLACE AND COMPILE JAVA SOURCE NAMED GET_OS_DIR_JAVA AS
       import java.io.*;
       import java.sql.*;
       public class GET_OS_DIR_JAVA
       {
              public static void getOSDirAndFile(String directory)throws SQLException
              {
                     File path = new File(directory);
                     String[] fileList = path.list();
                     String fileName;
                     long fileSize;
                     long fileDate;
                     
                     #sql{ truncate table OS_DIR};
                     for(int i = 0; i < fileList.length; i++)
                     {
                             fileName = fileList[i];
                             File fpath = new File(directory + '/' + fileName);
                             fileSize = fpath.length();
                             fileDate = fpath.lastModified();
                             
                             #sql{ insert into OS_DIR (name, size_byte, modify_date) 
                                   values(:fileName, :fileSize, to_date('01/01/1970', 'mm/dd/yyyy') + :fileDate / (24*60*60*1000))};
                     }
              }
              public static void getOSDir(String directory)throws SQLException
              {
                     File path = new File(directory);
                     String[] fileList = path.list();
                     String fileName;
                     long fileSize;
                     long fileDate;
                     
                     #sql{ truncate table OS_DIR};
                     for(int i = 0; i < fileList.length; i++)
                     {
                             fileName = fileList[i];
                             File fpath = new File(directory + '/' + fileName);
                             fileSize = fpath.length();
                             fileDate = fpath.lastModified();
                             if(fpath.isFile())
                                 continue;
                             
                             #sql{ insert into OS_DIR (name, size_byte) values(:fileName, :fileSize)};
                     }
              }
              public static void getOSRoot()throws SQLException
              {
                     String rootName;
                     long rootSize;
                     File[] roots = File.listRoots();
              		
                     #sql{ truncate table OS_DIR};
                     for(int i = 0; i < roots.length; i++)
                     {
                             rootName = roots[i].toString();
                             rootSize = roots[i].length();
                             
                             #sql{ insert into OS_DIR (name, size_byte) values(:rootName, :rootSize)};
                     }                     
              }
              public static boolean isDirOrFileExist(String directory)throws SQLException
              {
                     File path = new File(directory);
                     return path.exists();
              }
              public static boolean isDirectory(String directory)throws SQLException
              {
                     File path = new File(directory);
                     return path.isDirectory();
}
 里边实现了 5 个函数。功能分别为取指定目录下的目录和文件、取指定目录下的目录、枚举磁盘所有根目录、判断指定文件或目录是否存在、判断是不是文件。 

接下来就是编写存储过程或函数调用 JAVA Resource

CREATE OR REPLACE PROCEDURE SP_GET_OS_DIR_JAVA(p_directory IN VARCHAR2) AS language java name 'GET_OS_DIR_JAVA.getOSDir(java.lang.String)';
CREATE OR REPLACE PROCEDURE SP_GET_OS_DIR_FILE_JAVA(p_directory IN VARCHAR2) AS language java name 'GET_OS_DIR_JAVA.getOSDirAndFile(java.lang.String)';
CREATE OR REPLACE PROCEDURE SP_GET_OS_ROOT_JAVA AS language java name 'GET_OS_DIR_JAVA.getOSRoot()';
CREATE OR REPLACE FUNCTION SP_IS_OS_DIR_FILE_EXIST_JAVA(p_directory IN VARCHAR2) RETURN Boolean AS language java name 'GET_OS_DIR_JAVA.isDirOrFileExist(java.lang.String)return java.lang.Boolean';
CREATE OR REPLACE FUNCTION SP_IS_OS_DIR_JAVA(p_directory IN VARCHAR2) RETURN Boolean AS language java name 'GET_OS_DIR_JAVA.isDirectory(java.lang.String)return java.lang.Boolean';


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值