我的要求是在我的java应用程序中使用sql loader加载脚本。为此,我一直在使用以下脚本
D:\oracle\product\10.2.0\db_1\BIN\SQLLDR.EXE userid=myDBUserID/myDBPswrd data=C:\Users\myUserName\Desktop\sql_ldr_files\1\table_export_DATA.ldr control=C:\Users\myUserName\Desktop\sql_ldr_files\1\table_export_DATA.ctl log=C:\Users\myUserName\Desktop\sql_ldr_files\1\logitit.log discard=C:\Users\myUserName\Desktop\sql_ldr_files\1\discard.txt bad=C:\Users\myUserName\Desktop\sql_ldr_files\1\bad.txt
但是在尝试首先在cmd提示符下运行它时,我意识到如果我不运行该命令,则在“以管理员身份运行”启动的cmd提示符下将无法运行该命令。
通过“以管理员身份运行”启动cmd后,命令成功运行,脚本已执行,表格已正确填充。
现在我的任务是使用相同的代码,但是在java代码中运行它。为此,我使用了以下java代码,
import java.io.FileWriter.*;
import java.io.BufferedWriter.*;
import java.io.BufferedReader.*;
import java.io.InputStreamReader.*;
import java.io.FileWriter;
import java.io.BufferedWriter;
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class RunSqlLrdFromJava
{
public static void main(String s[])
{
try{
Runtime rt = Runtime.getRuntime();
String sqlLoaderPath = "D:\\oracle\\product\\10.2.0\\db_1\\BIN\\";
String runAsCmd="runas /user:myPCName\\administrator ";
String cmd = runAsCmd + "\""+sqlLoaderPath + "SQLLDR.EXE userid=myDBUserID/myDBPswrd "
+ " data=C:\\Users\\myUserName\\Desktop\\sql_ldr_files\\1\\table_export_DATA.ldr"
+ " control=C:\\Users\\myUserName\\Desktop\\sql_ldr_files\\1\\table_export_DATA.ctl"
+ " log=C:\\Users\\myUserName\\Desktop\\sql_ldr_files\\1\\logitit.log"
+ " discard=C:\\Users\\myUserName\\Desktop\\sql_ldr_files\\1\\discard.txt"
+ " bad=C:\\Users\\myUserName\\Desktop\\sql_ldr_files\\1\\bad.txt " + "\"";
try{
FileWriter file = new FileWriter("ExceptionInSqlldr.txt");
BufferedWriter bf = new BufferedWriter(file);
bf.write("SQLLDR COMMAND:\n" +cmd +"---------------------------------\n\n\n");
Process proc = rt.exec(cmd);
int exitVal = proc.waitFor();
BufferedReader br = new BufferedReader(new
InputStreamReader(proc.getErrorStream()));
String line;
System.out.println("\n------------------exitVal:"+exitVal+"------------------\n\n");
bf.write("SQLLDR COMMAND:\n" +cmd +"---------------------------------\n\n\n");
if(br!=null && exitVal!=0)
{ while((line = br.readLine()) != null)
{
bf.write("\n"+ line +"\n");
System.out.println("Read from error stream: \"" + line + "\"");
}
}
proc.destroy();
bf.close();
}
catch(Exception e)
{
e.printStackTrace();
//System.out.println(e.getMessage());
}
}
catch(Exception e)
{
e.printStackTrace();
//System.out.println(e.getMessage());
}
}
}
但这一次,它不会运行。
我的问题是,当我们使用“run as”在命令提示符下以管理员身份运行该进程时,它会提示输入密码。因此,当我在java代码中使用相同的“run as”命令时,我无法提供对该提示的响应[至少看起来如此]。
是否有一个出路,我可以通过在命令中传递管理员密码,从我的java代码中以管理员身份运行命令,以便我的java代码成功运行它?
请提出建议,因为我之前从未这样做过。
热烈的问候。