4

ローカル マシンに挿入/更新クエリを含む SQL スクリプトがあります。次に、Java アプリを使用して、このスクリプトを ftp 経由で UNIX マシンに配置しています。次に、jsch を使用して、同じ Java アプリを介してそのマシンに sqlplus コマンドを送信しています。しかし、エラーが発生しています: exit-status -- 127. 現在、127 コードは「コマンドが見つかりません」であることがわかりました。その UNIX マシンで $PATH を確認したところ、sqlplus へのパスが含まれていました。私が使用しているコードを以下に示します。ここで、 cmd = "sqlplus uname/pwd@databaseURL @insert_script.sql" を渡します。

    public static String executeCmd(String cmd){

    String user = "username";
    String host = "XX.XXX.XX.XX";
    String owner = new String();
    JSch jsch = new JSch();                
    try {
        Session session = jsch.getSession(user, host, 22);
        //session.setPassword("pwd");
        UserInfo usrInfo = new localUserInfo();
        session.setUserInfo(usrInfo);
        session.connect();
        Channel channel = session.openChannel("exec");
        ((ChannelExec) channel).setCommand(cmd);                        
        channel.setXForwarding(true);
        InputStream in = channel.getInputStream();
        channel.connect();                        
        channel.setInputStream(System.in);
        byte[] tmp = new byte[2048];
        while (true) {

            while (in.available() > 0) {
                int i = in.read(tmp, 0, 2048);
                if (i < 0)
                    break;
                owner = (new String(tmp, 0, i));
            }
            if (channel.isClosed()) {
                   owner = "exit-status: "+channel.getExitStatus();
                   break;
            }
            try {
                Thread.sleep(1000);
            } catch (Exception ee) {
            }
        }
                    System.out.println(owner);
        channel.disconnect();
        session.disconnect();
    } catch (Exception e) {
        e.printStackTrace();
    }
            return owner;
}

別の JDBC 接続を作成する必要がない方法を提案してください。

4

0 に答える 0