「ひとかじりのりんご」

へっぽこエンジニアの備忘録。こちらは旧ブログ。新しい方はこちら→「http://sbkro.github.io」

MacのEclipse4.3からSQL Server 2012に接続させてみた。

あまり需要がないと思うけど、諸事情があり設定することになったので、メモ書きを残しておきます。結論から言うと、SQL ServerJDBCドライバがタイプ4に対応しているので、Macからでも問題なく通信できました。

実行環境

SQL Serverのインストール

Microsoftのホームページからインストーラがダウンロード出来ます。

今回は、SQL Server Management Studio(GUIの管理ツール)も使いたいので、「JPN\x64\SQLEXPRADV_x64_JPN.exe」を選択します。僕の環境では、Internet ExplorerからDLしないと、「File is corrupt」というエラーが表示されました。ご注意ください。

ダウンロードした「SQLEXPRADV_x64_JPN.exe」をダブルクリックして、「SQL Serverインストールセンター」を起動します。インストールは、「インストール」→「SQL Serverの新規スタンドアロンインストールを実行するか、既存のインストールに機能を追加します。」を選びます。

ここから先の詳しいインストール方法は、こちらを参照してください。

リモート接続の有効化

SQL Serverは、デフォルトではTCP/IP経由でのリモート接続は出来ないため設定を行います。

1. スタートメニューより、「SQL Server 構成マネージャー」を選択します。
f:id:sbkro:20131228231205j:plain

2. 「SQL Serverネットーワークの構成」→「<データベースの名前>のプロトコル」→「TCP/IP」→「有効化」を選択します。

3.「SQL Serverネットーワークの構成」→「<データベースの名前>のプロトコル」→「TCP/IP」→「プロパティ」を選択します。

4. IPAllのTCPポートを任意の値(1433を推奨)を入力し、「OK」ボタンを選択します。

5. 「SQL Serverのサービス」→「SQL Server(<データベースの名前>)」→「再起動」を選択します。

これで、TCP/IP接続が可能となります。

ファイヤウォールの設定

続いて、上記設定したSQL Serverのポートを開放し、ホストOSからの通信ができるように設定します。

1. 「コントロールパネル」→「Windows ファイアウォール」→「詳細設定」を選択します。

2. 以下の「受信の規制」を追加します。

規制の種類 ポート
プロトコルおよびポート TCP/上記で設定したポート番号(1433)
操作 接続を許可する
プロファイル ドメイン/プライベート/パブリック

Eclipseのインストール

インストールは、このサイトを参考にしてみてください。

JDBCドライバ

SQL ServerJDBCドライバについては、Micosoftから提供されています。

ダウンロードしたZIPファイルを展開後、「sqljdbc4.jar」が存在することを確認します。このファイルがJDBCドライバとなります。このファイルを任意の場所へ移動し、プロジェクトのビルドパスに登録するようにしてください。

通信テスト

Javaプログラムから、通信できるか確認します。以下の様なプログラムを作成し、通信できるか確認してみます。

package jp.sbkro.sqlserver;

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

public class TestConnect {
  public static void main(String[] args) {
    System.out.println("Connection Start.");

    try {
      Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
      Connection connection = DriverManager.getConnection(
        "jdbc:sqlserver://<ゲストOSのIPアドレス>:1433;databaseName=<接続データベース名>;", 
        "<ユーザ名>", "<パスワード>");
      System.out.println("Connection Success.");
    } catch (ClassNotFoundException e) {
      e.printStackTrace();
    } catch (SQLException e) {
      e.printStackTrace();
    }

    System.out.println("Connection End.");
    }
}

コンソールから以下のような表示がされると、通信成功です。

Connection Start.
Connection Success.
Connection End.