【Java】【SQLServer】SQLServer用JDBCを利用してローカルのSQLServer2017に接続する


備忘用に残しています
※時間があったらまとめます。

環境

種別 ツール名 備考
OS Windows 10 Pro
IDE Pleiades 2018 Javaのフルエディションを使用
Java Java8
DB SQL Server 2017 Developer

SQLServer のJDBCをJavaプロジェクトに追加する

①該当のバージョンのJDBCをダウンロード
②「C:\Program Files」に解凍
 ※Microsoftは上記プログラムフォルダに保存することを推奨している模様
 ※解凍したJDBCにあるinstall.txtで明記されています
③Eclipseのプロジェクトにて任意のフォルダに該当のJDBCのJARファイルを移動する
 ※私は「mssql-jdbc-7.2.1.jre8.jar」を使用し、ファイルはコピーせずに「ファイルへのリンク」にしました
プロジェクト・エクスプローラーでJDBCを追加したいプロジェクトでコンテキストメニュー(右クリック)でプロパティ―を選択
④Java のビルド・パスで「ライブラリー」タブを選択し、「JAR の追加」ボタン押下
⑤JDBCを入れたフォルダを選択し、「OK」ボタン押下
⑥「適用して閉じる」ボタンを押下する

エラー内容

com.microsoft.sqlserver.jdbc.SQLServerException: ホスト [servername]、ポート 1433 への TCP/IP 接続が失敗しました。エラー: "Connection refused: connect。接続プロパティを調べて、SQL Server のインスタンスがホスト上で実行されていて、ポートへの TCP/IP 接続が許可されており、そのポートへの TCP 接続がファイアウォールにブロックされていないことを確認してください。"。

原因

記載の通り。
自分の場合は、SQL Server のTCP/IP 通信を許可していなかったため、上記エラーが発生していました。

解決策
※他の原因は時間ができたら記載します。

①Windows + R で表示されるファイル名を指定して実行ダイアログにて「SQLServerManager14.msc」 でSQL Server 構成 マネージャー を起動する
②SQL Server 構成マネージャー > SQL Server ネットワークの構成 > MSSQLSERVER のプロトコルを選択し、TCP/IPを選択、コンテキストメニュー(右クリック表示)で有効化を選択
③SQL Server 構成マネージャー > SQL Server のサービス でSQL Server(MSSQLSERVER) を選択し、コンテキストメニュー(右クリック表示)で「再起動」を選択しSQL Serverのサービスを起動し直す
④下記コードを実行

接続確認用のテストコード
※任意の値に変更してください

ConnectURL.java

package testdbconnection;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class ConnectURL {
    public static void main(String[] args) {

        // Create a variable for the connection string.
        String connectionUrl = "jdbc:sqlserver://[servername:[port];databaseName=[dbname];user=[username];password=[password]";

        try (Connection con = DriverManager.getConnection(connectionUrl); Statement stmt = con.createStatement();) {
            String SQL = "SELECT TOP 10 * FROM [tablename]";
            ResultSet rs = stmt.executeQuery(SQL);

            // Iterate through the data in the result set and display it.
            while (rs.next()) {
                System.out.println(rs.getString("[columnname1]") + " " + rs.getString("[columnname2]"));
            }
        }
        // Handle any errors that may have occurred.
        catch (SQLException e) {
            e.printStackTrace();
            System.out.println("can't connectioned");
        }
    }
}