1
import java.sql.SQLException;
import oracle.jdbc.pool.OracleDataSource;
import java.sql.Statement;
import java.util.Properties;
import oracle.jdbc.OracleConnection;

public class Test {

static final String url2= "jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP 

(HOST=192.168.1.171)(PORT=5521))"+"(CONNECT_DATA =(SERVICE_NAME = rdbms)))";

public static void main(String[] args) throws SQLException {

            OracleDataSource ds = new OracleDataSource();
           Properties prop = new Properties();
           prop.setProperty("user","system");
           prop.setProperty("password","manager");
           prop.setProperty("internal_logon","sysdba");
           prop.setProperty("prelim_auth","true");
           ds.setConnectionProperties(prop);
           ds.setURL(url2);
           OracleConnection conn = (OracleConnection)ds.getConnection();
           conn.startup(OracleConnection.DatabaseStartupMode.NO_RESTRICTION);
           conn.close();
    }
}

得到

Exception in thread "main" java.sql.SQLException: Listener refused the connection with the following error:
ORA-12514, TNS:listener does not currently know of service requested in connect descriptor

有人能帮忙吗?

4

2 回答 2

1

原因:
侦听器接收到建立与数据库或其他服务的连接的请求。侦听器接收到的连接描述符为尚未向侦听器动态注册或尚未为侦听器静态配置的服务(通常是数据库服务)指定服务名称。这可能是一个临时条件,例如在侦听器启动之后,但在数据库实例向侦听器注册之前。

行动: - 稍等片刻,然后尝试第二次连接。

  • 通过执行以下命令检查侦听器当前知道哪些服务: lsnrctl services

  • 检查使用的网络服务名称的连接描述符中的 SERVICE_NAME 参数是否指定了侦听器已知的服务。

  • 如果使用了简单连接命名连接标识符,请检查指定的服务名称是否为侦听器已知的服务。

  • 检查 listener.log 文件中的事件。

于 2012-11-06T14:41:25.520 回答
0

您必须了解,当涉及到异常时,JDBC 很多时候只是充当 DB 端发生的错误的包装器,
或者传播特定于驱动程序(即 postgresql jdbc 驱动程序、oracle jdbc 驱动程序)的特定错误。
你应该用谷歌搜索错误,你会发现我认为是一个明确的解释: http:
//ora-12514.ora-code.com/
如果您看到其中一个建议,请在几秒钟后重试并重新连接。

于 2012-11-06T14:41:06.473 回答