您的位置:首页 > 数据库 > Oracle

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

2014-07-26 13:14 666 查看
首先,声明下次方法不是用来攻破服务器用的,只是为了学习如何用 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';
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: