Java中TelnetClient使⽤实例
花了⼏天时间赶了个软件,功能是Telnet登录到⼀台Linux主机上,然后执⾏命令,将返回的信息解析后插⼊到Oracle数据库中(多线程登录,数据库连接池处理连接并发)。总的来说功能⽐较简单,但是对Oracle数据库使⽤完全是0,还是让⼈纠结,所以记录下来。
下载apache⾸先说Java下Telnet的实现。先提Apache基⾦会(/index.html),下⾯的提供的开源软件⾮常多,进⼊Categories可以领略下。我这⾥⽤到了Commons Net(/net/i),下载Jar包(我⽤的是commons-net-2.0.jar),这个应该不影响,⽹站⾥⾯提供了相关类或者例⼦可以查看。我贴出这个Commons Net 3.1包中的API看看,说不定以后需要呢:
org.apachemons Common socket classes and protocol command utility classes
org.apachemons.bsd Classes for rcommand, rexec, rlogin
org.apachemons.chargen Chargen over TCP and UDP
org.apachemons.daytime Daytime over TCP and UDP
org.apachemons.discard Discard over TCP and UDP
ho Echo over TCP and UDP
org.apachemons.finger Finger implementation
org.apachemons.ftp FTP and FTPS support classes
org.apachemons.ftp.parser FTP file listing parser classes
org.apachemons.imap Basic IMAP and IMAPS support classes
org.apachemons.io Utility classes for IO support.
p NNTP - network news transfer protocol
p NTP - network time protocol
org.apachemons.pop3 POP3 and POP3S mail
org.apachemons.smtp SMTP and SMTPS mail
lnet Telnet implementation
org.apachemons.tftp TFTP cliemt implementation
org.apachemons.time Time protocol (RFC 868) over TCP and UDP
org.apachemons.util Utility classes
org.apachemons.whois Whois client
当然,我这⾥⽤的是⾥⾯的telnet。⾮常幸运的到了参考1(TelnetClient远程访问unix系统),写得很好,代码直接可以拿来⽤,因此使⽤的例⼦直接就可以使⽤。我提⼀下过程,⾸先也是主要的TelnetClient,继承⾃org.apachemons.SocketClient,调⽤connect(ip,端⼝)建⽴TCP连接,然后通过 getInputStream() 和 getOutputStream() 获得输⼊输出流,就可以进⾏通信了,在具体的命令之前,需要login⽤户名和输⼊password,登录成功后得到系统的接收输⼊标志($或其它),在完成相关命令后执⾏disconnect关闭连接。实现⾮常简单,接下来看看数据库。
这⾥安装的是Oracle 10g,在Windows XP上,在Win 7上装的时候⽼是提⽰ORA-12546: TNS: 权限被拒绝的错误,没时间解决,可以换成11g。数据库的安装没有特别的,选个⾼级安装,默认来就差不多了。只是⽤的时候⾃⼰犯傻了,⾮要个图形界⾯(MSSQL带来的弊病啊),其实下个PL/SQL或者Navicat(忘了说了可以直接通过Web访问的,确实⾮常⽅便。)。原来⽤Navicat MySQL,想想试试
Navicat Oracle,配置也很简单参考2(如果是远端访问,就需要⾃⼰下载访问客户端),如果在数据库所在机⼦上使⽤直接在⼯具中查OCI动态库(在安装⽬录下)就可以。但是它的使⽤让我彻底傻了,知道Oracle是不区分⼤⼩写的,但是件了test1,test2在Navicat上都能正常显⽰,可是使⽤其⾃动登录的sqlplus就是看不到,但是查询HELP等⾃带的表⼀个不少。。。,后来⼲脆都删除,直接在sqlplus建⽴,显⽰查询都正常,发现在Navicat中的表名都是⼤写。再⽤⼤写建表尝试,结果正常显⽰。。。这个。。。,好了,不多说了,那么通过JDBC连接Oracle⽰例⾮常多了,Class.forName ( "oracle.jdbc.driver.OracleDriver" );注册下,Connection ( oracle,m_User,m_pwd );获得连接,后⾯通过这个连接ateStatement,配合Statement ResultSet 等执⾏相关的语句即可,⾄于连接池,简单说就是预先建⽴⼀部分连接,需要时将连接分配出去,⽤完后只是标记下其使⽤状态(相当于⼜放回池中),如此循环往复。顺便提⼀下的是数据库⾃带的timestamp类型,对应写sql语句时为sysdate,可以直接变为当前时间。最后还要提醒下,执⾏的sql语句不要有分号哦,否则⽼是会提⽰ORA-00911: ⽆效字符 (这个⼀出来,肯定是语句有问题了,不要怀疑别⼈啊)
落下的总要补上的,原来看Java编程思想,想的正则表达式后⾯再看,结果这次就⽤到了,其中的解析就是,同时使⽤了LinkedHashMap,来保存键值对及插⼊的顺序。继续。。。
参考
1.TelnetClient远程访问unix系统 liyan4770.iteye/blog/739113
2.Navicat 9如何连接ORACLE10G数据库 wwwblogs/vic_lu/archive/2010/08/28/1810704.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。