jsch连接mysql_求用jsch网络工具包通过ssh连接远程oracle数据库并发送sql操作语句(数据库在unix上)java代码例子...
求用jsch網絡工具包通過ssh連接遠程oracle數據庫(數據庫在unix上)java代碼例子:為何jsch發送:sqlplususer/pwd@service此命令,卻沒有結果返回啊。下面是代碼:publicclassSSHClienti...
求用jsch網絡工具包通過ssh連接遠程oracle數據庫(數據庫在unix上)java代碼例子: 為何jsch發送:sqlplus user/pwd@service 此命令,卻沒有結果返回啊。下面是代碼:
public class SSHClient implements ConnClient {
private Logger log=Logger.getLogger(SSHClient.class);
private int sessiontimeout = 6000;
private String addr;
private int port = 22;
private String username;
private String password;
Session session = null;
Channel channel = null;
ChannelExec execChannel = null;
public SSHClient(String addr) {
this.addr = addr;
}
public SSHClient(String addr, int port) {
this.addr = addr;
this.port = port;
}
public boolean connect(String username, String password) {
JSch jsch = new JSch();
try {
session = jsch.getSession(username, addr, port);
session.setUserInfo(new MyUserInfo(password));
session.setConfig("StrictHostKeyChecking", "no");
// session.setPassword(password);
session.connect(sessiontimeout);
} catch (JSchException e) {
log.error("SSHClient Connect Error :"+e.getMessage());
return false;
}
return true;
}
public String execcmd(String cmd) {
try {
channel = session.openChannel("exec");
execChannel = (ChannelExec) channel;
execChannel.setCommand(cmd);
execChannel.connect();
BufferedReader fromServer;
fromServer = new java.io.BufferedReader(new InputStreamReader(
(execChannel.getInputStream())));
StringBuffer sb = new StringBuffer();
// try {
// Thread.sleep(1000);
// } catch (InterruptedException e) {
// e.printStackTrace();
// }
// while (fromServer.ready()) {
// String tt = fromServer.readLine();
// sb.append(tt + '\n');
// }
String tt=null;
while ((tt=fromServer.readLine())!=null) {
sb.append(tt + '\n');
}
fromServer.close();
return sb.toString();
} catch (Exception e) {
e.printStackTrace();
return null;
} finally {
execChannel.disconnect();
}
}
public void close() {
if (session != null) {
session.disconnect();
}
}
/**
* @param args
*/
public static void main(String[] args) {
SSHClient ssh = new SSHClient("192.168.4.126", 22);
ssh.connect("abc", "abc");
String ret = ssh.execcmd("ps -ef|grep java ");//這個可以返回結果,但連接oracle數據庫sqlplus命令卻無結果顯示
System.out.println(ret);
ssh.close();
}
public static class MyUserInfo implements UserInfo {
MyUserInfo(String password){
this.passwd=password;
}
String passwd = null;
public String getPassword() {
return passwd;
}
public boolean promptYesNo(String str) {
return true;
}
public String getPassphrase() {
return null;
}
public boolean promptPassphrase(String message) {
return true;
}
public boolean promptPassword(String message) {
return true;
}
public void showMessage(String message) {
}
}
}
=======================問題我已解決
可以將要執行的oracle查詢寫到shell腳本中:
#!/bin/bash
. ${HOME}/.profile
sqlplus -s xx/yy@lc8 <
set linesize 1000;
select * from mon_type;
quit
!
然后讀取此腳本轉為字符串,
String cmdValue =readFile();
String ret = client.execcmd(cmdValue);
System.out.println("["+ret+"]");
這樣就有返回結果了。
或者:
注意發送的shell命令的寫法:注意加上環境配置的profile,并且以\n換行
String cmdValue = "cd;. ${HOME}/.profile;sqlplus monitor/monitor@lcims8 <
String ret = client.execcmd(cmdValue);
這樣ret就有結果返回了。
sysbase寫法:
cmdValue="cd;. ${HOME}/.profile;isql -Uxx -Pyy -SUSER_SERVER7 -w400<
select top 2 * from M_C00\ngo";
展開
總結
以上是生活随笔為你收集整理的jsch连接mysql_求用jsch网络工具包通过ssh连接远程oracle数据库并发送sql操作语句(数据库在unix上)java代码例子...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java常见笔试_Java 常见笔试题(
- 下一篇: mysql独立开发_独立开发一个 App