在休眠中配置时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 时连接被拒绝
Oracle 11g r2 ORA-01017:用户名/密码无效;通过 JDBC 驱动程序连接时登录被拒绝