Engineer Blog開発者ブログ

2018.5.16

JDBCでSQL Server Express エディションに接続する

Icons made by Darius Dan from www.flaticon.com is licensed by CC 3.0 BY

 

 

今度はJDBCから接続する時にハマってしまいました。。。

 

今度はなんとJavaからJDBC経由で接続するときにこんなエラーが出て参りました。。。

 

com.microsoft.sqlserver.jdbc.SQLServerException: The connection to the host localhost, named instance sqlexpress failed. Error: "java.net.UnknownHostException: localshost". 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:227)
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.getInstancePort(SQLServerConnection.java:5241)

    ….
 

接続先のミス等の凡ミスだろうとコードを確認。

 

Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
Connection con = DriverManager.getConnection("jdbc:sqlserver://localhost\\SQLEXPRESS;databaseName=testdb", "sa", "password");

 

どこも間違っていない。A5で接続できたじゃん!

 

Exceptionログを見たところ、UDPの「1434」ポートが開いていない事が判明。

A5SQLは1433で接続できていたので、SqlServerは1433ポートだ!と勝手に思い込んでいました。

 

というわけで、Windows側のFirewallのポートを解放し解決。

 

 

 

A5SQLはNative Client(ODBC)経由、JavaはJDBC経由で違いとしては以下となります。

ODBC Microsoftが開発したデータベースドライバ。C言語に特化
JDBC 上記のJava版

 

 

う~ん。何故にポートが違うのか。。。※何故違うかは後ほど分かり次第、記載致します。

 

 

余談ですが、JDBCに投げたSQLはSQLServer側で素直にそのまま実行している訳で無く

「exec sp_prepare」というシステムストアドプロシージャを介して実行されるので、SQLによっては「SQLツールからの実行は早いけどJDBCだと遅い」

という結果になります。

 

 

最近はずっとintra-martで開発を行ってきて、裏の面倒な部分は全部intra-martがヨロシク処理してくれていたので

この辺の知識?がご無沙汰になってしまっていて反省しております。。。

Contact
お問い合わせ

電話番号0120 - 889 - 236
受付時間:平日 9:00-18:00