关于使用java调用sqlloader

我们的一个项目采用SQL*Loader的方法将数据导入Oracle数据库。
主要方法是Java写好控制文件拼接好sqlldr命令字符串,通过Runtime类在终端命令行执行。
但是在执行的时候报错了,java.io.IOException: Cannot run program "sqlldr": error=2, A file or directory in the path name does not exist。
但是我用相同的命令在cmd里面可以执行,这是什么原因呢

4个回答

贴下你写的执行的sqlldr的代码

aslong_456
aslong_456 我把代码贴出来了,在楼下
接近 2 年之前 回复

图片说明,这个是我执行的命令,我在java里面调用的命令是一样的

不多说了,直接看我的代码吧。

public static String getLoaderCmdStr(String userid, String ctlFile, String csvData, String impLog, String badFile, boolean isClobData){

    FileUtil.mkdirsPath(FileUtil.getPathOfPathFile(impLog));
    FileUtil.mkdirsPath(FileUtil.getPathOfPathFile(badFile));

    StringBuilder builder = new StringBuilder();
    String osName = System.getProperty("os.name").toLowerCase();
    if(osName.trim().startsWith("win")){
        builder.append("cmd /c set NLS_LANG=AMERICAN_AMERICA.AL32UTF8 && ");
    }

    builder.append("sqlldr skip=1 rows=100000 readsize=20680000 bindsize=20680000 errors=-1 ")
    .append("userid=").append(userid)
    .append(" control=").append(ctlFile)
    .append(" data=").append(csvData)
    .append(" log=").append(impLog)
    .append(" BAD=").append(badFile);

    if(!isClobData){
        builder.append(" direct=true")
    ;
    }
    log.debug("imp command:" + builder.toString());
    return builder.toString();
}

你就只看拼的执行命令的字符串部分就可以了。执行的话,应该都是一样的方式。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!