1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > jsch连接mysql_求用jsch网络工具包通过ssh连接远程oracle数据库并发送sql操作语句(数

jsch连接mysql_求用jsch网络工具包通过ssh连接远程oracle数据库并发送sql操作语句(数

时间:2020-03-11 04:54:47

相关推荐

jsch连接mysql_求用jsch网络工具包通过ssh连接远程oracle数据库并发送sql操作语句(数

求用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代码例子...

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。