本周末的某个时候,我们的一个数据库(11.1.0.7)开始有问题通过Java访问部分网络上的某些文件夹。我使用java的一小部分来重现问题,它只做一个文件对象并尝试删除文件。从 数据库中,这适用于删除本地文件并删除\ zion \ dp \ share中的网络文件,但不能从\ zion \ it \ share中删除。Oracle数据库使用Java删除文件
我们有另一个数据库在相同的域用户帐户下运行,从这个位置删除文件没有问题。同时以服务器上的相同域用户身份登录,出现问题,我可以在Oracle之外运行Java,并且在删除 文件时没有问题。域用户可以完全控制文件夹并登录,因为我可以创建,修改和删除文件。
如果我没有授予我的oracle数据库用户相应的dbms_java权限,我会得到相应的java.security.AccessControlException错误。在我授予权限后,java运行完成,delete命令返回false(不删除),并且不删除该文件。
我用Oracle打开了一个案例,但看起来他们不会再帮忙,因为它涉及到从java层运行的文件命令,即使它只能从Oracle环境重现。
测试代码:
import java.io.*;
import java.sql.*;
import java.util.*;
public class Ajclass
{
public static void ajprocedure(String pdfFileName) throws Exception
{
boolean result;
try {
System.out.println("Start!");
File file = new File(pdfFileName);
//result = file.delete();
result = file.exists();
if (result == true)
System.out.println("xxFile deleted.");
else
System.out.println("xxFile NOT deleted!");
System.out.println("End!");
} catch (Exception e) {
throw(e);
}
}
}
其他代码,我最近发现将失败只是针对这一比例也只有从这个数据库中运行时:
import java.io.*;
import java.sql.*;
public class DirectoryListing
{
public static void getList(String directory) throws SQLException
{
File path = new File(directory);
String[] list = path.list();
String element;
int CurrentFile;
for(CurrentFile = 0; CurrentFile < list.length; CurrentFile++)
{
element = list[CurrentFile];
#sql { INSERT INTO DIRECTORYLISTING (FILENAME) VALUES (:element) };
}
}
}
删除只是一个测试。真正的处理将pdf与值和另一个pdf合并,以写出新的pdf。 – 2009-09-16 16:14:16