环境:
一台数据库服务器:linux redhat7.3+J2SDK1.4.2_04+oracle8iEE8.1.7;
一台web应用服务器:linux redhat7.3+J2SDK1.4.2_04+TOMCAT5.0.27;
目标:
web应用服务器通过oracle的java驱动thin方式访问数据库服务器;
问题:
web服务器上的oracle的java驱动thin方式无法访问数据库,抛出的错误为IO错误,如下:
java.sql.SQLException: Io 异常: The Network Adapter could not establish the connection
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:168)
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:210)
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:323)
at oracle.jdbc.driver.OracleConnection.<init>(OracleConnection.java:263)
at oracle.jdbc.driver.OracleDriver.getConnectionInstance(OracleDriver.java:365)
at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:260)
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at TestAcct.main(TestAcct.java:15)
小的测试脚本代码:
import java.sql.*;
public class TestAcct
{
public static void main(String args[])
{
try
{
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection con=DriverManager.getConnection("jdbc
racle:thin
192.168.1.12:1521:test","test","test");
Statement st=con.createStatement();
String Sql="select realname from userctl where user_name='test'";
ResultSet rs=st.executeQuery(Sql);
if( rs!=null)
{
while( rs.next() )
{
System.out.println(rs.getString(1));
}
rs.close();
}
st.close();
con.close();
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
已做的检查:
1、两台机器都没有防火墙;
2、该脚本在数据库服务器上能执行并返回正确的值打印;
3、该脚本在任意一台linux上都能访问由W2K+oracle8.1.7架构的数据库服务器,却不能在两个linux服务器间访问,报错信息相同;
4、oracle的listener都已经确认启动;
5、用PL SQL Developer都能访问数据库,用SQL命令“select * from product_component_version”查看产品信息视图,
linux下为:
1 NLSRTL 3.4.1.0.0 Production
2 Oracle8i Enterprise Edition 8.1.7.0.1 Production
3 PL/SQL 8.1.7.0.0 Production
4 TNS for Linux: 8.1.7.0.0 Development
W2K下为:
1 NLSRTL 3.4.1.0.0 Production
2 Oracle8i Enterprise Edition 8.1.7.0.0 Production
3 PL/SQL 8.1.7.0.0 Production
4 TNS for 32-bit Windows: 8.1.7.0.0 Production
只有2、4项有区别。
请教是否有高手知道问题在哪里?如何解决?还有什么我没想到的?
谢谢!