2013-02-11 318 views
2

我使用的jar JTDS-1.3.0.jar通過休眠連接到MS SQL和下面是配置文件休眠MS SQL連接

<hibernate-configuration> 
<session-factory> 
    <!-- Database connection settings --> 
    <property name="connection.url">jdbc:jtds:sqlserver://localhost/login</property> 
    <property name="connection.driver_class">net.sourceforge.jtds.jdbc.Driver</property> 
    <property name="connection.username">sa</property> 
    <property name="connection.password">user</property> 

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

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


    <!-- Enable Hibernate's automatic session context management --> 
    <property name="current_session_context_class">thread</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">update</property> 

    <!-- configuration pool via c3p0--> 
    <property name="c3p0.acquire_increment">5</property> 
    <property name="c3p0.idle_test_period">100</property> <!-- seconds --> 
    <property name="c3p0.max_size">20</property> 
    <property name="c3p0.max_statements">50</property> 
    <property name="c3p0.min_size">5</property> 
    <property name="c3p0.timeout">1800</property> <!-- seconds --> 
    <property name="connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property> 
    <!--Basic user functionality--> 

</session-factory> 

但每次我跑我的項目的時間網絡錯誤和連接被拒絕時發生錯誤。 我推薦this link仍然給錯誤。下面是我的堆棧跟蹤

java.sql.SQLException: Network error IOException: Connection refused: connect 
at net.sourceforge.jtds.jdbc.JtdsConnection.<init>(JtdsConnection.java:434) 
at net.sourceforge.jtds.jdbc.Driver.connect(Driver.java:183) 
at com.mchange.v2.c3p0.DriverManagerDataSource.getConnection(DriverManagerDataSource.java:134) 
at com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:183) 
at com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:172) 
at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool$1PooledConnectionResourcePoolManager.acquireResource(C3P0PooledConnectionPool.java:152) 
at com.mchange.v2.resourcepool.BasicResourcePool.doAcquire(BasicResourcePool.java:1074) 
at com.mchange.v2.resourcepool.BasicResourcePool.doAcquireAndDecrementPendingAcquiresWithinLockOnSuccess(BasicResourcePool.java:1061) 
at com.mchange.v2.resourcepool.BasicResourcePool.access$800(BasicResourcePool.java:32) 
at com.mchange.v2.resourcepool.BasicResourcePool$ScatteredAcquireTask.run(BasicResourcePool.java:1796) 
at com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:635) Caused by: java.net.ConnectException: Connection refused: connect 
at java.net.DualStackPlainSocketImpl.connect0(Native Method) 
at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source) 
at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source) 
at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source) 
at java.net.AbstractPlainSocketImpl.connect(Unknown Source) 
at java.net.PlainSocketImpl.connect(Unknown Source) 
at java.net.SocksSocketImpl.connect(Unknown Source) 
at java.net.Socket.connect(Unknown Source) 
at sun.reflect.GeneratedMethodAccessor24.invoke(Unknown Source) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
at java.lang.reflect.Method.invoke(Unknown Source) 
at net.sourceforge.jtds.jdbc.SharedSocket.createSocketForJDBC3(SharedSocket.java:300) 
at net.sourceforge.jtds.jdbc.SharedSocket.<init>(SharedSocket.java:253) 
at net.sourceforge.jtds.jdbc.JtdsConnection.<init>(JtdsConnection.java:329) 

以下是圖像 Server Configuration Manager 誰能告訴我在哪裏,我錯了。

+0

使用端口號進行連接:默認端口號是1433,這是Connecion拒絕的原因之一IOException – gks 2013-02-11 10:51:20

+0

你的模式真的叫做「登錄」嗎? – david99world 2013-02-11 10:58:50

+0

是的我的模式是登錄 – Rithesh 2013-02-11 11:16:14

回答

4

看看你確定你的服務器偵聽端口1433?要確認實際的問題是與Java(即你的配置)運行

telnet localhost 1433 

如果你沒有得到的答案則MS SQL是最有可能不是在1433上運行還有就是用在MS SQL動態端口的選項,確保你沒有啓用。

http://frightanic.com/software-development/connecting-to-ms-sql-server-2012-express-through-jdbc-failed/

第一個障礙是學習的是MS SQL快遞默認使用 動態端口。要以Java的TCP/IP方式進行連接,您需要手動配置靜態端口 。

+0

嗨馬塞爾,我創建數據庫在微軟SQL服務器管理工​​作室它有任何區別? – Rithesh 2013-02-11 13:13:14

+0

嗨@Marcel Stor需要在命令提示符下運行telnet localhost 1433或? – Rithesh 2013-02-11 13:22:24

+0

@Rithesh - 是的,使用命令提示符。 – webnoob 2013-02-11 13:29:54

2

portNumber是可選的。缺省值爲1433.如果使用default,則不必在URL中指定port及其前面的':'。

<property name="connection.pool_size">10</property> 

它將一次只允許一個連接。我想在你的程序中的某個位置嘗試打開另一個會話。

Hibernate config connection pool size

+0

hi suresh ya我給出了端口號並將池大小增加到了10,但我仍然認爲它有異常有連接到SQL Server的問題 – Rithesh 2013-02-11 12:28:39

+0

一切都很好,這個鏈接http://knowhow.visual-paradigm.com/hibernate/solving-sql-server-connection-problem/ – 2013-02-11 13:25:48

+0

嗨suresh我已經通過該鏈接,啓用telnet未連接到服務器,然後將安全性更改爲SQL Server身份驗證的結果仍然相同。 – Rithesh 2013-02-11 13:46:24

2

嘗試改變網址:

<property name="connection.url">jdbc:jtds:sqlserver://localhost:1443;DatabaseName=login</property> 

從服務器地址分離的架構名稱。

我用DBVisualizer中連接到MS SQL和它顯示的URL配置的格式:

URL Format: jdbc:jtds:sqlserver://<server>:<port1443>;DatabaseName=<database> 
+0

用服務器的正確端口替換1443。 – 2013-02-11 13:11:32

+1

他已經做到了,閱讀其他答案和他的評論。 – 2013-02-11 13:17:55

+0

這裏的要點是將服務器地址與模式名稱分開,將「DatabaseName = login」添加到配置中。 – 2013-02-11 13:27:50

1

我發現我的解決問題的辦法。我將端口號從1433改爲1434,通過參考this進行討論。謝謝大家的支持