2011-04-03 162 views
2

我有這樣的代碼:的Java連接到SQL Server

try 
    { 
     Class.forName("net.sourceforge.jtds.jdbc.Driver"); 

     Connection conn = DriverManager.getConnection(
      "jdbc:jtds:sqlserver://myMachine:1433/myDB;instance=sql2008;user=myUserName;password=myPassword;" 
     ); 

     System.out.println("connected"); 
    } 
    catch (Exception e) 
    { 
     e.printStackTrace(); 
    } 

這是例外,我得到:

Unable to get information from SQL Server: myMachine. 
     at net.sourceforge.jtds.jdbc.MSSqlServerInfo.<init>(MSSqlServerInfo.java:97) 
     at net.sourceforge.jtds.jdbc.ConnectionJDBC2.<init>(ConnectionJDBC2.java:276) 
     at net.sourceforge.jtds.jdbc.ConnectionJDBC3.<init>(ConnectionJDBC3.java:50) 
     at net.sourceforge.jtds.jdbc.Driver.connect(Driver.java:184) 
     at java.sql.DriverManager.getConnection(DriverManager.java:582) 
     at java.sql.DriverManager.getConnection(DriverManager.java:207) 
     at Library.MusicItem.Save(MusicItem.java:22) 
     at AddMusicForm.jButton1ActionPerformed(AddMusicForm.java:86) 
     at AddMusicForm.access$000(AddMusicForm.java:17) 
     at AddMusicForm$1.actionPerformed(AddMusicForm.java:45) 
     at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995) 
     at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318) 
     at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387) 
     at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242) 
     at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236) 
     at java.awt.Component.processMouseEvent(Component.java:6289) 
     at javax.swing.JComponent.processMouseEvent(JComponent.java:3267) 
     at java.awt.Component.processEvent(Component.java:6054) 
     at java.awt.Container.processEvent(Container.java:2041) 
     at java.awt.Component.dispatchEventImpl(Component.java:4652) 
     at java.awt.Container.dispatchEventImpl(Container.java:2099) 
     at java.awt.Component.dispatchEvent(Component.java:4482) 
     at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4577) 
     at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238) 
     at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168) 
     at java.awt.Container.dispatchEventImpl(Container.java:2085) 
     at java.awt.Window.dispatchEventImpl(Window.java:2478) 
     at java.awt.Component.dispatchEvent(Component.java:4482) 
     at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:644) 
     at java.awt.EventQueue.access$000(EventQueue.java:85) 
     at java.awt.EventQueue$1.run(EventQueue.java:603) 
     at java.awt.EventQueue$1.run(EventQueue.java:601) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87) 
     at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:98) 
     at java.awt.EventQueue$2.run(EventQueue.java:617) 
     at java.awt.EventQueue$2.run(EventQueue.java:615) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87) 
     at java.awt.EventQueue.dispatchEvent(EventQueue.java:614) 
     at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269) 
     at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184) 
     at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174) 
     at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169) 
     at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161) 
     at java.awt.EventDispatchThread.run(EventDispatchThread.java:122) 

在SQL配置管理器中我已經設置TCP/IP,命名管道,共享內存並將VIA設置爲啓用。

我已驗證提供的用戶名和密碼是否正確。端口號也是正確的。

爲什麼我得到這個錯誤以及如何解決這個問題?

PS:我正在使用sql server 2008 express

+1

數據庫是否在1433端口上運行?如果你進入命令行,如果你使用'ping myMachine',你會得到什麼(它是否解析爲IP?也就是說,myMachine是否解析爲可以從運行測試的地方訪問的IP地址?如果你從命令行執行'netstat -an',你會看到'myMachine:1433'的TCP或UDP條目嗎?也就是說,SqlServer綁定到該主機名和端口(而不是本地主機或127.0。 0.1)?如果確實在運行,你可以在哪裏找到它,你可以用SqlServer Config Manager連接那個用戶名和pwd嗎? – 2011-04-03 16:55:43

+0

如果我做了netstat -an,我沒有看到任何端口號爲1433的東西。當我ping我的機器我得到這個:'回覆從fe80 :: 807e:73b6:47fb:9348%11:time <1ms'。我可以使用配置管理器的用戶名登錄 – Martijn 2011-04-03 17:02:47

+0

@Martjin,你從'ping myMachine '? – 2011-04-03 17:24:16

回答

11

我明白了。 SQL Service browser服務未啓動。在我開始這項服務後,我可以連接到服務器。

+0

也適用於SQL Server 2012。 – quantum 2015-08-24 14:04:05