Java 広告

【Java】JavaとMavenでデータベースにアクセスしてクエリを実行する

記事内に商品プロモーションを含む場合があります

今回はJavaでMavenプロジェクトを作成して、データベースにアクセスする方法を紹介します。

Javaを使う開発の時に限らずプログラムを製造する時、データベースにアクセスしたいというのはよくあることです。

そして、その際には専用のライブラリ(jarファイルなど)を使って、データベースアクセスを実装することが多いです。

今回はSQL Serverを使うと想定して、Mavenプロジェクトでデータベースの接続を行い、クエリを実行して、実行結果を取得するところまでを実装してみることにします。

前準備

今回のデータベースアクセスではMavenプロジェクトでSQLServer用のJDBCを使ってSQL Serverにアクセスを行います。

そのため、JDBCをどこかで入手するか外部のJDBCの参照を行うかを行うわけですが、Mavenではpomファイルにこの情報を記載する必要があります。

今回は外部のJDBCを参照することで、SQL Serverの接続を行うことにするため、pom.xmlに以下の記述を追加します。

  <dependencies>
		<!-- https://mvnrepository.com/artifact/com.microsoft.sqlserver/mssql-jdbc -->
		<dependency>
			<groupId>com.microsoft.sqlserver</groupId>
			<artifactId>mssql-jdbc</artifactId>
			<version>12.8.1.jre11</version>
		</dependency>
  </dependencies>

この記述の意味ですが、https://mvnrepository.com/artifact/com.microsoft.sqlserver/mssql-jdbc
に存在しているSQL Server用のJDBCを参照し、プロジェクト内で利用できるようにしています。

なぜこのバージョンなのかは、上記のURLにアクセスして頂くと、以下のような表示になっていることが確認できます(2025年2月時点)。

previewは試験的に公開したもので安定版ではありませんので、一番最新で使えるものは12.8.1.jre11または12.8.1.jre8となります。

なので、pomで参照しているのも12.8.1.jre11を参照しています。

今回jre11を選んだのはなるべく最新のjreを使いたかったためであり、特にこだわりがなければjre8を選ぶ理由がなかったためです。

データベースにアクセスするプログラムの実装

データベースにアクセスするには、以下の手順を踏んでデータベースにアクセスします。

  1. 接続URL、ユーザー名、パスワード、実行するクエリを定義
  2. JDBCに含まれるgetConnectionメソッドで、データベースに接続する
  3. executeQueryメソッドでクエリを実行する(SELECTクエリを実行する場合)
  4. executeQueryが実行結果を返すので、実行結果を変数に格納し、利用する

これらを行ったプログラムが以下のようになります。

	private static String ExecuteSQL() {
		String retStr = "";//クエリ実行結果返却用の変数
		
		//接続URL
		String urlStr = "jdbc:sqlserver://TAKA:1433;databaseName=test;encript=true;trustServerCertificate=true";
		//ユーザー名 
		String userName="test";
		//パスワード
		String password ="test";
		
		//SQLクエリ
		String query="SELECT item_code, item_name FROM item";
		
		//JDBC接続を行い、クエリを実行する
		try(Connection con = DriverManager.getConnection(urlStr, userName, password);
			Statement state = con.createStatement();
			ResultSet resSet = state.executeQuery(query)){
			//取得した行の末端まで結果を表示する
			while(resSet.next()) {
				//表示するものを書く
				System.out.println("商品コード:" + resSet.getString("item_code") + "  商品名:" + resSet.getString("item_name"));
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		
		return retStr;
	}

このプログラムは単純にSELECTクエリを実行し、クエリの実行結果をコンソールに出力するプログラムとなっています。

接続URLではサーバー名TAKAのデータベースtestにポート番号1433(SQLServerのデフォルトのポート番号)にアクセスし、暗号化を有効、サーバー証明書を信頼する設定にしています。

ユーザー名、パスワードはあらかじめtestで入れるように設定していますので、ユーザー名、パスワードをtestとしています。

上記の設定は接続するSQL Serverのデータベースによって異なるので、設定したデータベースに合った接続URL、ユーザー名、パスワードを設定するようにします。

そして、getConnectionでSQL Serverに実際に接続し、executeQueryメソッドでクエリを実行しています。

このexecuteQueryですが、Select文の場合はこのメソッドで大丈夫ですが、データの更新や削除、新規作成の場合はexecuteUpdateを使う必要があります。

executeQueryメソッドがSELECTクエリの実行結果を返すので、変数に入れておき、後続の処理でクエリの実行結果を1行ずつ見ていき、結果を返すようにしています。

それでは、このプログラムの実行結果を見てみましょう。

では、次にサーバー上でクエリを実行した結果を見てみましょう。

結果が一致していることにより、正しくデータベースに接続し、クエリの実行結果を取得できていることが分かりました。

プログラムを実行してエラーになる場合

上記で紹介したプログラムを実際に書いてエラーになる場合はSQL Serverの設定に問題がある可能性が高いです(接続文字列が正しいのに接続拒否のエラーの場合はほぼ確実にSQL Sderverの設定が間違っています)。

まず1つ目ですが、接続するデータベースにきちんとユーザーが割り当てられているかを確認してください。

ユーザーが割り当てられていないと、SQLServer側で接続を拒否されます。

また、2つ目として、SQLServer自体がユーザー、パスワードによるログインを許可しているかを確認してください。

Windowsマークのボタン+Rを押すと名前を指定して実行が出来ます。

ここで、以下のように入力します。

名前はSQL Serverのバージョンによって異なりますが、SQLServerのバージョンが16の場合は上記の名前になります。

すると管理画面が立ち上がるので、SQL Serverのネットワークの構成→MSSQLSERVERのプロトコルを選択すると、TCP/IPという項目があります。

ここが無効になっているとSQL Serverはパスワードによるログインの接続を拒否するので、右クリックメニューからTCP/IPを有効化してください。

まとめ

今回はJavaでSQL接続を行う例としてMavenを用いてデータベースアクセスを行う方法を紹介しました。

今回はSQL Serverを用いたのですが、MySQLやOracle、postgreSQLでもやるべきことは大体同じになります。

ですので、今回紹介した方法を応用し、データベースアクセスの部分の実装でハマらないように、きちんと今回説明した内容を理解して実践に活かしてほしいと思います。

今回の記事はここまでとなります。
また次の記事でお会いしましょう。