新手:用JDBC能连接本地Oracle数据库,但远程服务器的就不行了。请教,谢谢。

时间:2022-09-21 15:08:56
两台机器数据库一样,Oracle安装也都是直接默认安装(新手-_-#)。
测试代码如下:
import java.sql.*;

public class OracleTest {

/**
 * @param args
 */
public static void main(String[] args) {
// 测试连接
 String driver = "oracle.jdbc.driver.OracleDriver";
 String url = "jdbc:oracle:thin:@*.*.*.*:1521:DISDATABASE";//IP保密之~
 String user = "SYSTEM";
 String password = "******";//密码就不写了。。。呵呵
 try {
 Class.forName(driver);
 Connection conn = DriverManager.getConnection(url, user, password);

 if(!conn.isClosed()){
 System.out.println("数据库连接成功!");
 }
conn.close();
 }
 catch(ClassNotFoundException e) {
 System.out.println("找不到驱动程序");
 e.printStackTrace();
 }
 catch(SQLException e) {
 e.printStackTrace();
 }
 catch(Exception e){
 e.printStackTrace();
 }
}
}

如果是连接本地机器,可以连接成功,换IP为另一台机器的时候就不行了(是不是没有启动什么listener?不懂。。。)
出现下面的异常:
java.sql.SQLException: Io 异常: The Network Adapter could not establish the connection
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:124)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:161)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:273)
at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:318)
at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:343)
at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:147)
at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:31)
at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:545)
at java.sql.DriverManager.getConnection(DriverManager.java:512)
at java.sql.DriverManager.getConnection(DriverManager.java:171)
at gojyo.jdbc.OracleTest.main(OracleTest.java:24)

在CMD下用sqlplus连接时出现下列错误:
sqlplus SYSTEM/******@10.64.65.180:1521:DISDATABASE
ERROR:
ORA-12514: TNS:listener does not currently know of service requested in connect descriptor

请问,怎么解决,非常感谢。
这个问题可能是很基础,可我确实找不到办法,请各位帮帮忙,小弟就此谢过。

5 个解决方案

#1


对了,版本是Oracle 10g. 两台机器分别是winxp(自己用的) 和win2003(远程机器)

#2


netstat查看有:
Active Connections

  Proto  Local Address          Foreign Address        State
  TCP    northwood:1030         northwood:1521         ESTABLISHED
  TCP    northwood:1031         northwood:1521         ESTABLISHED
机器防火墙的1521端口也已经打开。

上面说到的sqlplus在直接用连接字串连接不成功时,再用用户名和密码登录又没问题。
isqlplus也可以用

#3


在net manager里的监听程序->LISTENER-数据库服务显示:
“未对此监听程序明确配置数据库服务。Oracle8i 8.1版的数据库将动态注册到该监听程序。

可能是这里有问题。

#4


刚刚看过一本书上面写的如果用户同数据库不在一台机器上的时候,需要在用户机器上设置环境变量NLS_LANG 还有 ORACLE network 制品(oracle net ),自己也没有实践过不知道好不好用。可以尝试一下。

#5


居然是防火墙的原因,可是极度没道理
win2003自带的防火墙,开了TCP 1521端口~
但是就是连不上,关掉防火墙就OK了~~

#1


对了,版本是Oracle 10g. 两台机器分别是winxp(自己用的) 和win2003(远程机器)

#2


netstat查看有:
Active Connections

  Proto  Local Address          Foreign Address        State
  TCP    northwood:1030         northwood:1521         ESTABLISHED
  TCP    northwood:1031         northwood:1521         ESTABLISHED
机器防火墙的1521端口也已经打开。

上面说到的sqlplus在直接用连接字串连接不成功时,再用用户名和密码登录又没问题。
isqlplus也可以用

#3


在net manager里的监听程序->LISTENER-数据库服务显示:
“未对此监听程序明确配置数据库服务。Oracle8i 8.1版的数据库将动态注册到该监听程序。

可能是这里有问题。

#4


刚刚看过一本书上面写的如果用户同数据库不在一台机器上的时候,需要在用户机器上设置环境变量NLS_LANG 还有 ORACLE network 制品(oracle net ),自己也没有实践过不知道好不好用。可以尝试一下。

#5


居然是防火墙的原因,可是极度没道理
win2003自带的防火墙,开了TCP 1521端口~
但是就是连不上,关掉防火墙就OK了~~