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
任何人都可以帮忙吗?
答案 0 :(得分:1)
<强>原因:强>
侦听器收到建立与数据库或其他服务的连接的请求。侦听器接收的连接描述符指定了服务(通常是数据库服务)的服务名称,该服务尚未向侦听器动态注册或尚未为侦听器静态配置。这可能是一个临时条件,例如在侦听器启动之后,但在数据库实例向侦听器注册之前。
<强>动作:强> - 稍等片刻再尝试连接。
通过执行以下命令检查侦听器当前已知的服务:lsnrctl services
检查所使用的网络服务名称的连接描述符中的SERVICE_NAME参数是否指定了侦听器已知的服务。
如果使用了简单连接命名连接标识符,请检查指定的服务名称是否为侦听器已知的服务。
检查listener.log文件中的事件。
答案 1 :(得分:0)
您必须明白,当涉及到异常时,JDBC很多时候只是用作DB侧发生的错误的包装,
或传播特定于错误的驱动程序(即postgresql jdbc驱动程序,oracle jdbc驱动程序)。
你应该谷歌错误,你会发现我认为是一个明确的解释:
http://ora-12514.ora-code.com/。
如果您看到其中一条建议,请在几秒钟后重试,然后重新连接。