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';


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章