Java SQLServerに接続してselectするサンプル

JavaのWindows認証とSQLServer認証でSQLServerに接続してselectするサンプルです。
(確認環境:Java 8,SQL Server 2019 Express Edition)

目次

サンプル Windows認証で接続してselectを実行する
  SQLServer認証の場合
  ドライバを取得する
  Windows認証で接続する設定方法

Windows認証で接続してselectを実行する

JavaでSQLServerに接続してselectを実行するサンプルです。

package test1;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

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

		final String URL = "jdbc:sqlserver://localhost\\SQLEXPRESS:1433;"
				 + "Database=testDB1;integratedSecurity=true;";
		final String SQL = "select * from syain where id =? and romaji=?";

		try (Connection conn = DriverManager.getConnection(URL);
			PreparedStatement ps = conn.prepareStatement(SQL)){

			ps.setInt(1, 2);
			ps.setString(2, "tanaka");

            try(ResultSet rs = ps.executeQuery()){
                while (rs.next()) {
                    System.out.println(
                    	rs.getInt("id") + " " +
                    	rs.getString("name") + " " +
                        rs.getString("romaji"));
                }           
            }
		} catch (SQLException e) {
			e.printStackTrace();
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			System.out.println("処理が完了しました");
		}
	}
}

11,12行目は、接続の文字列です。
11行目のlocalhostはサーバ名でSQLEXPRESSはインスタンス名です。円マークで区切っています。
12行目のDatabase=testDB1は、データベース名です。
Windows認証の場合は、integratedSecurity=trueを指定します。
13行目は、SQL文です。クエスチョンマーク(?)は、プレースホルダです。パラメータで値を設定します。
入力される不正な文字を抑止できるのでSQLインジェクション対策になります。
固定文字列のSQLの部分がプリコンパイルされるので実行速度が上がります。
15行目のtryの後に続くかっこ()はリソースを自動でクローズします。try-with-resources構文と呼ばれます。Java7で導入されました。
18,19行目は、プレースホルダに値をセットしています。
21行目は、SQL文を実行しています。

 

SQLServer認証の場合

上記コードの接続の文字列を修正します。

	final String URL = "jdbc:sqlserver://localhost\\SQLEXPRESS:1433;"
			+ "Database=testDB1;integratedSecurity=false;"
			+ "user=sa;password=test1";

integratedSecurity=falseとし、ユーザーとパスワードを指定します。
SQLEXPRESSはインスタンス名です。
SQLServer認証の場合、後述のmssql-jdbc_auth-9.4.1.x64.dllは不要です。

 

ドライバを取得する

1-1.Microsoft SQL Server 用 JDBC Driver のダウンロードのページからドライバをダウンロードします。

https://docs.microsoft.com/ja-jp/sql/connect/jdbc/download-microsoft-jdbc-driver-for-sql-server?view=sql-server-ver15

1-2.ダウンロードしたzipを展開し、jarファイルをクラスパス(ビルドパス)に設定します。
jarファイルはJava8用のmssql-jdbc-9.4.1.jre8.jarを設定しました。

Eclipse jarファイルをクラスパスに設定する方法

Mavenからも取得できます。

https://mvnrepository.com/artifact/com.microsoft.sqlserver/mssql-jdbc

 

Windows認証で接続する設定方法

.ddlを配置

上記で取得したzipファイル内のsqljdbc_9.4\jpn\auth\x64配下にあるmssql-jdbc_auth-9.4.1.x64.dllをpathが通っているフォルダに配置します。※x64は64bitでx86は32bitです。

mssql-jdbc_auth-9.4.1.x64.dll

C:\Program Files\Java\jdk1.8.0_211\jre\binに配置しました。

上記ファイルがない場合は、以下のメッセージが表示されます。

SQL Server のインスタンスがホスト上で実行されていて、ポートへの TCP/IP 接続が許可されており、そのポートへの TCP 接続がファイアウォールにブロックされていないことを確認してください。

 

2.Sql Server Configuration Managerを開き以下の設定を確認

2-1.「SQL Serverネットワーク」の構成の「SQLEXPRESSのプロトコル」のTCP/IPが「無効」の場合は「TCP/IP」を右クリックして「有効」にします。

SQL Server 構成マネージャの開き方と接続確認

TCP/IPが無効の場合は、以下のメッセージが表示されます。

サーバー sqlexpress は、TCP/IP をリッスンするように構成されていません。

 

2-2.「SQL Serverのサービス」の「SQL Server Browser」が「停止」の場合は起動して「実行中」にします。※起動方法は次の3-3に記載。

実行されていない場合は、以下のメッセージが表示されます。

SQL Server 2005 以降では、SQL Server Browser サービスがホスト上で実行されていることを確認してください。

 

2-3.「SQL Server Browser」の起動方法は、「SQL Server Browser」を右クリックしてプロパティを選択し「サービス」の「開始モード」を「自動」にします。

 

2-4.上記それぞれの設定を反映させるには「SQL Serverのサービス」の「SQL Server (SQLEXPRESS)」を右クリックして再起動をクリックします。

関連の記事

SQLServer DDL文でtable,view等を作成するサンプル
Java SQLServerでinsert/update/deleteするサンプル

△上に戻る