我在本地机器上有一个带有插入/更新查询的 sql 脚本。然后使用 java 应用程序,我通过 ftp 将此脚本放在 unix 机器上。然后,我通过同一个 java 应用程序使用 jsch 向该机器发送 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 连接的方法。