2014-07-19 15 views
6

Tôi đang sử dụng Hibernate, kết nối MySQL là hợp lệ nhưng tôi nhận được thông tin sau. Làm cách nào để xem thêm chi tiết về chuỗi kết nối mà nó kết nối?java.sql.SQLException: Các kết nối không thể có được từ cơ sở dữ liệu cơ bản

ERROR SchemaUpdate - could not get database metadata 
java.sql.SQLException: Connections could not be acquired from the underlying database! 
     at com.mchange.v2.sql.SqlUtils.toSQLException(SqlUtils.java:106) 
     at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool.checkoutPooledConnection(C3P0PooledConnectionPool.java:529) 
     at com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource.getConnection(AbstractPoolBackedDataSource.java:128) 
     at org.hibernate.connection.C3P0ConnectionProvider.getConnection(C3P0ConnectionProvider.java:78) 
     at org.hibernate.tool.hbm2ddl.SuppliedConnectionProviderConnectionHelper.prepare(SuppliedConnectionProviderConnectionHelper.java:51) 
     at org.hibernate.tool.hbm2ddl.SchemaUpdate.execute(SchemaUpdate.java:168) 
     at org.hibernate.impl.SessionFactoryImpl.<init>(SessionFactoryImpl.java:356) 
     at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1341) 
Caused by: com.mchange.v2.resourcepool.CannotAcquireResourceException: A ResourcePool could not acquire a resource from its primary factory or source. 
     at com.mchange.v2.resourcepool.BasicResourcePool.awaitAvailable(BasicResourcePool.java:1319) 
     at com.mchange.v2.resourcepool.BasicResourcePool.prelimCheckoutResource(BasicResourcePool.java:557) 
     at com.mchange.v2.resourcepool.BasicResourcePool.checkoutResource(BasicResourcePool.java:477) 
     at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool.checkoutPooledConnection(C3P0PooledConnectionPool.java:525) 
     ... 10 more 
ERROR SchemaUpdate - could not complete schema update 
java.sql.SQLException: Connections could not be acquired from the underlying database! 
     at com.mchange.v2.sql.SqlUtils.toSQLException(SqlUtils.java:106) 
     at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool.checkoutPooledConnection(C3P0PooledConnectionPool.java:529) 
     at com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource.getConnection(AbstractPoolBackedDataSource.java:128) 
     at org.hibernate.connection.C3P0ConnectionProvider.getConnection(C3P0ConnectionProvider.java:78) 
     at org.hibernate.tool.hbm2ddl.SuppliedConnectionProviderConnectionHelper.prepare(SuppliedConnectionProviderConnectionHelper.java:51) 
     at org.hibernate.tool.hbm2ddl.SchemaUpdate.execute(SchemaUpdate.java:168) 
     at org.hibernate.impl.SessionFactoryImpl.<init>(SessionFactoryImpl.java:356) 
     at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1341) 
Caused by: com.mchange.v2.resourcepool.CannotAcquireResourceException: A ResourcePool could not acquire a resource from its primary factory or source. 
     at com.mchange.v2.resourcepool.BasicResourcePool.awaitAvailable(BasicResourcePool.java:1319) 
     at com.mchange.v2.resourcepool.BasicResourcePool.prelimCheckoutResource(BasicResourcePool.java:557) 
     at com.mchange.v2.resourcepool.BasicResourcePool.checkoutResource(BasicResourcePool.java:477) 
     at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool.checkoutPooledConnection(C3P0PooledConnectionPool.java:525) 
     ... 10 more 

ERROR JDBCExceptionReporter - Connections could not be acquired from the underlying database! 
org.hibernate.exception.GenericJDBCException: Cannot open connection 
     at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:126) 
     at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:114) 
     at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66) 
     at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:52) 
     at org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:449) 
     at org.hibernate.jdbc.ConnectionManager.getConnection(ConnectionManager.java:167) 
     at org.hibernate.jdbc.JDBCContext.connection(JDBCContext.java:142) 
     at org.hibernate.transaction.JDBCTransaction.begin(JDBCTransaction.java:85) 
     at org.hibernate.impl.SessionImpl.beginTransaction(SessionImpl.java:1354) 
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
     at java.lang.reflect.Method.invoke(Method.java:606) 
     at org.hibernate.context.ThreadLocalSessionContext$TransactionProtectionWrapper.invoke(ThreadLocalSessionContext.java:342) 
     at com.sun.proxy.$Proxy0.beginTransaction(Unknown Source) 

Caused by: java.sql.SQLException: Connections could not be acquired from the underlying database! 
     at com.mchange.v2.sql.SqlUtils.toSQLException(SqlUtils.java:106) 
     at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool.checkoutPooledConnection(C3P0PooledConnectionPool.java:529) 
     at com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource.getConnection(AbstractPoolBackedDataSource.java:128) 
     at org.hibernate.connection.C3P0ConnectionProvider.getConnection(C3P0ConnectionProvider.java:78) 
     at org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:446) 
     ... 15 more 
Caused by: com.mchange.v2.resourcepool.CannotAcquireResourceException: A ResourcePool could not acquire a resource from its primary factory or source. 
     at com.mchange.v2.resourcepool.BasicResourcePool.awaitAvailable(BasicResourcePool.java:1319) 
     at com.mchange.v2.resourcepool.BasicResourcePool.prelimCheckoutResource(BasicResourcePool.java:557) 
     at com.mchange.v2.resourcepool.BasicResourcePool.checkoutResource(BasicResourcePool.java:477) 
     at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool.checkoutPooledConnection(C3P0PooledConnectionPool.java:525) 
     ... 18 more 

đây là xml ngủ đông của tôi:

<hibernate-configuration> 
    <session-factory> 

     <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> 
     <property name="hibernate.connection.url">jdbc:mysql://127.0.0.1:3306/test</property> 

     <property name="hibernate.connection.username">root</property> 
     <property name="hibernate.connection.password">xxxxxx</property> 

     <property name="show_sql">false</property> 
     <property name="dialect">org.hibernate.dialect.MySQLDialect</property> 
     <property name="hibernate.hbm2ddl.auto">update</property> 
     <property name="connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property> 
     <property name="hibernate.c3p0.max_statements">200</property> 

     <property name="hibernate.c3p0.min_size">20</property> 
     <property name="hibernate.c3p0.max_size">200</property> 
     <property name="hibernate.c3p0.idle_test_period">300</property> 
     <property name="hibernate.c3p0.timeout">300</property> 

     <property name="hibernate.c3p0.max_statements">200</property> 
     <property name="current_session_context_class">thread</property> 

    </session-factory> 
</hibernate-configuration> 
+0

Điều này có xảy ra với mọi hoạt động hay chỉ một vài lần? – bitkot

+0

@AmitChotaliya nó xảy ra tất cả các thời gian, tôi có thể kết nối với jdbc: mysql: // localhost: 3306/test và jdbc: mysql: //127.0.0.1: 3306/test mà không có vấn đề ở dòng lệnh, các cổng được mở – user121196

+0

OK, Tôi hỏi rằng vì điều này xảy ra khi bạn kết nối tối đa. tức là trong c3p0 bạn có 200 kết nối cho phép nhưng mysql mặc định tối đa 151, vì vậy nếu nó cố gắng để có được sau đó thì bạn sẽ nhận được lỗi này. – bitkot

Trả lời

2

tôi sẽ giới thiệu hai điều để có được vấn đề này được giải quyết: tiên, hãy thử nhắc đến tên cơ sở dữ liệu của bạn bằng chữ in hoa. Mặc dù db là trường hợp không nhạy cảm, đôi khi nó chạy tốt với mũ.

Thứ hai, vấn đề này có thể phát sinh do một số nội dung bổ sung mà bạn có thể đã thêm vào với giá trị nhà máy của phiên. Ví dụ (tôi sẽ lấy mã i sử dụng và phải đối mặt với vấn đề này và đã thoát khỏi nó): Một phần của xml của tôi đi như thế này:

<session-factory> 
    <property name="hbm2ddl.auto">update</property> 
    <property name="dialect">org.hibernate.dialect.MySQLDialect</property> 
    <property name="connection.url">jdbc:mysql://10.184.56.183:3306/******?relaxAutoCommit=true&amp;autoReconnect=true&amp;useUnicode=true&amp;characterEncoding=utf8</property> 
    <property name="connection.username">******</property> 
    <property name="connection.password">******</property> 
    <property name="hibernate.show_sql">true</property> 
    <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> 
    <property name="hibernate.current_session_context_class">thread</property> 
    <property name="hibernate.connection.pool_size">5</property> 
    <property name="hibernate.connection.shutdown">true</property> 
    <property name="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</property> 
    <property name="hibernate.cache.use_second_level_cache">false</property> 
    <property name="hibernate.cache.use_query_cache">false</property> 
    <property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property> 
    <property name="hibernate.c3p0.min_size">2</property> 
    <property name="hibernate.c3p0.max_size">5</property> 
    <property name="hibernate.c3p0.timeout">108000</property> 
    <property name="hibernate.c3p0.max_statements">50</property> 
    <property name="hibernate.c3p0.idle_test_period">1000</property> 
    <property name="hibernate.c3p0.validate">true</property> 
    <property name="hibernate.c3p0.acquire_increment">5</property>  

Vì vậy, giữ cắt tỉa giá trị thêm như sạch url kết nối cơ sở dữ liệu của bạn và các đồ đạc. Tôi cũng gặp vấn đề khi tạo mã từ bảng cơ sở dữ liệu. Vì vậy, tôi đã tạo một cấu hình xml khác và làm điều đó đơn giản nhất có thể và làm như vậy. Nó rất ổn.

+1

Nó phải là bình luận không phải là một câu trả lời! – Hamad

+0

Hey @Hamad, bây giờ có ổn không? hoặc tôi sẽ thay đổi điều này để bình luận? –

1

Trong trường hợp của tôi đó là vấn đề mà tập tin c3p0-0.9.2.1.jar không được sao chép bởi maven vào src/main/webapp/web-inf/libs

1

Tôi có vấn đề này và vấn đề là địa chỉ trụ IP của chúng tôi bị chặn bởi máy chủ MySQL do nhiều kết nối các nỗ lực bằng thông tin đăng nhập không hợp lệ.

Đảm bảo bạn có thể kết nối với máy chủ bằng cùng một phương thức/mạng như ứng dụng của bạn. Nếu bạn nhận được điều này hoặc một cái gì đó như thế này khi cố gắng kết nối bằng cách sử dụng một số máy khách MySQL (như Workbench)

Host 'XXX-XXX-XXX-XXX.static.XXXXXX.XXX' is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts' 

IP của bạn bị chặn và đó là vấn đề.

Các vấn đề liên quan