从java应用程序以管理员身份执行sql loader

从java应用程序以管理员身份执行sql loader,java,sql,windows,cmd,Java,Sql,Windows,Cmd,我的要求是从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_e

我的要求是从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());
        }
        }       

    }
但这一次,它不会运行

我的问题是,当我们在命令提示符下使用“运行方式”以管理员身份运行进程时,它会提示输入密码。因此,当我在java代码中使用相同的“run-as”命令时,我无法提供对该提示符的响应(至少看起来是这样)

有没有办法,我可以在java代码中以管理员身份运行命令,只在命令中传递管理员密码,这样我的java代码就可以成功运行它了

请给我一些建议,因为我以前从来没有这样做过


问候。

您不应该需要(也不应该使用)管理员帐户。如果你不这样做,你会犯什么错误。我猜输入文件的权限是错误的。您应该解决这个问题,而不是解决真正的问题。“SQL*Loader-704:内部错误:ulconnect:OCIEnvCreate[-1]”我在从普通用户帐户启动的cmd提示符运行java代码时遇到此错误。现在,当我使用“以管理员身份运行”启动cmd提示符时,我没有收到任何错误,脚本加载成功。你看,这就是我的问题所在。当我在我的应用程序中使用此代码时,它可能没有“管理员”作为其用户。到那时,我将面临同样的错误(我们不能使用“运行方式”语法以管理员身份运行命令,并将密码作为参数传递给它吗?您应该找到出现此错误的真正原因。听起来Oracle客户端安装不正确(或者只能由管理员访问)。以管理员身份运行并不是一个解决方案,这是一个丑陋的解决方案。不,没有密码提示,无法使用runas。你是正确的。真正的问题是我的桌面上有UAC(用户访问控制)级别设置为中级。这是任何试图被显式调用并要求管理员权限的应用程序。现在我已经关闭了该功能,java代码运行完全正常。感谢您的帮助。