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 のダウンロードのページからドライバをダウンロードします。
1-2.ダウンロードしたzipを展開し、jarファイルをクラスパス(ビルドパス)に設定します。
jarファイルはJava8用のmssql-jdbc-9.4.1.jre8.jarを設定しました。
Mavenからも取得できます。
https://mvnrepository.com/artifact/com.microsoft.sqlserver/mssql-jdbc
Windows認証で接続する設定方法
1.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」を右クリックして「有効」にします。
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するサンプル