在休眠中配置时jdbc连接被拒绝

Posted

技术标签:

【中文标题】在休眠中配置时jdbc连接被拒绝【英文标题】:jdbc connection refused while configuring in hibernate 【发布时间】:2014-04-29 08:32:21 【问题描述】:

我正在使用带有 jar ojdbc7 的 oracle 12c 在休眠中配置 DB。但我收到以下错误:

org.hibernate.exception.JDBCConnectionException:调用 Driver#connect 时出错 在 org.hibernate.engine.jdbc.connections.internal.BasicConnectionCreator$1$1.convert(BasicConnectionCreator.java:122) 在 org.hibernate.engine.jdbc.connections.internal.BasicConnectionCreator.convertSqlException(BasicConnectionCreator.java:140) 在 org.hibernate.engine.jdbc.connections.internal.DriverConnectionCreator.makeConnection(DriverConnectionCreator.java:58) 在 org.hibernate.engine.jdbc.connections.internal.BasicConnectionCreator.createConnection(BasicConnectionCreator.java:75) 在 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl.configure(DriverManagerConnectionProviderImpl.java:106) 在 org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:89) 在 org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:206) 在 org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:178) 在 org.hibernate.engine.jdbc.internal.JdbcServicesImpl.buildJdbcConnectionAccess(JdbcServicesImpl.java:260) 在 org.hibernate.engine.jdbc.internal.JdbcServicesImpl.configure(JdbcServicesImpl.java:94) 在 org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:89) 在 org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:206) 在 org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:178) 在 org.hibernate.cfg.Configuration.buildTypeRegistrations(Configuration.java:1885) 在 org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1843) 在 org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1928) 在 com.vikas.hibernate.HibernateTest.main(HibernateTest.java:21) 原因:java.sql.SQLException:侦听器拒绝连接并出现以下错误: ORA-12505, TNS:listener 目前不知道连接描述符中给出的 SID

at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:673)
at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:715)
at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:385)
at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:30)
at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:564)
at org.hibernate.engine.jdbc.connections.internal.DriverConnectionCreator.makeConnection(DriverConnectionCreator.java:55)
... 14 more

原因:oracle.net.ns.NetException:侦听器拒绝连接并出现以下错误: ORA-12505, TNS:listener 目前不知道连接描述符中给出的 SID

at oracle.net.ns.NSProtocolStream.negotiateConnection(NSProtocolStream.java:272)
at oracle.net.ns.NSProtocol.connect(NSProtocol.java:263)
at oracle.jdbc.driver.T4CConnection.connect(T4CConnection.java:1360)
at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:486)
... 19 more

我的hibernate.cfg.xml如下: oracle.jdbc.driver.OracleDriver jdbc:oracle:thin:localhost:1522/DevDb 系统 oracle123

    <!-- JDBC connection pool (use the built-in) -->
    <property name="connection.pool_size">1</property>

    <!-- SQL dialect -->
    <property name="dialect">org.hibernate.dialect.OracleDialect</property>

    <!-- Disable the second-level cache  -->
    <property name="cache.provider_class">org.hibernate.cache.internal.NoCacheProvider</property>

    <!-- Echo all executed SQL to stdout -->
    <property name="show_sql">true</property>

    <!-- Drop and re-create the database schema on startup -->
    <property name="hbm2ddl.auto">create</property>

谁能帮我解决这个问题。


它说

ORA-12505,TNS:listener 目前不知道连接描述符中给出的 SID

我给定的 SID 是正确的。

【问题讨论】:

您可以使用其他工具连接到数据库吗,例如 SQL*Plus? 【参考方案1】:

您的设置是正确的,与 persistence.xml->older(hibernate.cfg.xml) 中的设置无关

我在半夜的应用程序中看到了很短的时间,虽然这个异常出现在 server-logg 中,但没有出现在 app-logg 中。我对此进行了分析,并且我的逻辑处理正确,这意味着这是一个 oracleXE 错误或应用程序服务器错误或 ORM-Provider 错误(休眠)!可以肯定的是,该应用程序自几个月以来一直在运行,但直到知道此异常才发生,关键是 nobdy 调用了客户端调用!我重新启动了服务器,一切似乎都是正确的。

如果网络连接在短时间内断开,因此服务器和数据库之间的数据对象的序列化无法访问,我不知道,这可能会发生,因为例如 JBoss正在缓存数据!

【讨论】:

【参考方案2】:

你的 jdbc 连接字符串几乎是正确的

oracle.jdbc.driver.OracleDriver jdbc:oracle:thin:localhost:1522/DevDb 

这是正确的

oracle.jdbc.driver.OracleDriver jdbc:oracle:thin:@//localhost:1522/DevDb

另外,请确保在尝试 ORM 方式之前尝试使用 sqlplus 登录。

【讨论】:

嗨 Bjarte... 它有帮助...但是现在我遇到了另一个问题,原因是:java.sql.SQLRecoverableException:IO 错误:网络适配器无法建立连接 可以用sqlplus连接吗?你确定是1522? C:\>tnsping DevDb 的输出是什么 非常感谢兄弟..它现在可以工作了...你是对的..服务器必须开始..从字符串 jdbc:oracle:thin:@//localhost:1522/DevDb “//”必须被删除,所以它现在工作正常...... :)

以上是关于在休眠中配置时jdbc连接被拒绝的主要内容,如果未能解决你的问题,请参考以下文章

连接到 postgresql:dbserver db 通过 JDBC 连接到 Databricks 时连接被拒绝

在docker中运行flyway时连接被拒绝

如何为 mysqlcluster 创建休眠配置文件?

Oracle 11g r2 ORA-01017:用户名/密码无效;通过 JDBC 驱动程序连接时登录被拒绝

Jenkins Artifactory 插件:请求版本信息时出错:连接被拒绝

JDBC Java连接被拒绝:连接[重复]