SQL Server 2008 R2 のインストールを介してインスタンス SQLEXPRESS をセットアップし、「sqluser」と呼ばれるすべてのサーバー ロールを持つセキュリティ ログインを追加しました。
接続をプールしようとするたびに例外に直面しています..接続文字列は次から構築されています:
<db.driverClassName>com.microsoft.sqlserver.jdbc.SQLServerDriver</db.driverClassName>
<database.username>sqluser</database.username>
<database.password>qwerty</database.password>
<database.schemaname>dbo</database.schemaname>
<database.url>jdbc:sqlserver://localhost\SQLEXPRESS</database.url>
しかし、接続はこのスタックトレースの根本原因に直面しています:
Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: The connection to the host localhost, named instance sqlexpress failed. Error: "java.net.SocketTimeoutException: Receive timed out". Verify the server and instance names and check that no firewall is blocking UDP traffic to port 1434. For SQL Server 2005 or later, verify that the SQL Server Browser Service is running on the host.
at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(SQLServerException.java:190)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.getInstancePort(SQLServerConnection.java:3589)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.primaryPermissionCheck(SQLServerConnection.java:1225)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.login(SQLServerConnection.java:972)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.connect(SQLServerConnection.java:827)
at com.microsoft.sqlserver.jdbc.SQLServerDriver.connect(SQLServerDriver.java:1012)
at org.apache.commons.dbcp.DriverConnectionFactory.createConnection(DriverConnectionFactory.java:38)
at org.apache.commons.dbcp.PoolableConnectionFactory.makeObject(PoolableConnectionFactory.java:582)
at org.apache.commons.dbcp.BasicDataSource.validateConnectionFactory(BasicDataSource.java:1556)
at org.apache.commons.dbcp.BasicDataSource.createPoolableConnectionFactory(BasicDataSource.java:1545)
... 71 more
サーバー認証は、SQL Server および Windows 認証モードです。しかし、-S プロパティを指定すると、ログインに失敗します。
有効なファイアウォールはなく、SQL サーバーはリモート ホストからの接続も受け入れます。
C:\Users\user>sqlcmd -U sqluser -P qwerty -Q "Select * FROM testdb.dbo.testtable"
出力:
integer
-------
1
2
3
4
(4 rows affected)
ただし、「localhost」を指定すると、クエリは失敗します...質問はなぜですか?
C:\Users\user>sqlcmd -S localhost/sqlexpress -U cpt -P 1234 -Q "Select * FROM cpt.dbo.testme"
出力:
HResult 0x43, Level 16, State 1
Named Pipes Provider: Could not open a connection to SQL Server [67].
Sqlcmd: Error: Microsoft SQL Server Native Client 10.0 : A network-related or in stance-specific error .....
Sqlcmd: Error: Microsoft SQL Server Native Client 10.0 : Login timeout expired.
'%COMPUTERNAME' で 'localhost' を変更すると、誰かが不思議に思うかもしれませんが、同じ結果になります。サーバーは LocalSystem インスタンスとして実行されています。
edit それは主にヒントでしたが、ラマに答えを割り当てます:) これが問題に対する私の解決策です:
1) tcp ip all listener port が 1434 に設定されていることを確認します 2) 接続文字列が適切に設定されていることを確認します (database.url) 3) ログインに十分なアクセス権があることを確認します (この特定のスタックトレースとは関係ありません)