JavaでSQL ServerからSelect

ひとつ前の研修で接続まではできました。では実際にSQL文を動かしましょう。

JavaでSelect

今回はjavaとSQLServerを接続してSQLのSELECT文を流してみましょう

  1. shohinテーブルの作成
  2. SQL文を流して結果を表示する

shohinテーブルの作成

この研修は「SQL - ゼロからはじめるデータベース操作」翔泳社を教科書にしてやったSQL講座の最後に行ったものです。そのためこの本で使っているデータを利用しています。

shohinテーブル作成

SQLServerにshopデータベースを作成し、その中にshohinテーブルを作成します。

shohin table

この本ではnull値に関して詳しく勉強したので、nullの値が入っていますが、別に同じデータである必要はありません。

商品ID、商品名、商品分類、販売単価、仕入れ単価、登録日の項目を使いました。

shohinテーブル作成

では、このテーブルからデータを検索するプログラムを作りましょう。プリペアードの練習で販売単価が1000円以上のものを検索します。

Main.java
	import java.sql.Connection;
	import java.sql.DriverManager;
	import java.sql.PreparedStatement;
	import java.sql.ResultSet;
	import java.sql.SQLException;
	
	public class Main {
		public static void main(String[] args) {
			try {
				Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
	
			} catch(ClassNotFoundException e) {
				throw new IllegalStateException("ドライバーのロードに失敗しました");
			}
	
			Connection con = null;
			try {
				con = DriverManager.getConnection("jdbc:sqlserver://localhost\\SQLEXPRESS;" +
						"databaseName=shop;IntegratedSecurity=true;TrustServerCertificate=true;");
				PreparedStatement pstmt = con.prepareStatement(
					"select * from shohin where hanbai_tanka >= ?");
				pstmt.setInt(1, 1000);
				ResultSet rs = pstmt.executeQuery();
				while( rs.next()) {
					System.out.printf("id:%s\tname:%s   \thanbai:%d\tshiire:%d\n",
						rs.getString("shohin_id"),rs.getString("shohin_mei"),
						rs.getInt("hanbai_tanka"),rs.getInt("shiire_tanka"));
				}
				pstmt.close();
	
			} catch (SQLException e) {
				e.printStackTrace();
			} finally {
				if (con != null) {
					try {
						con.close();
					} catch(SQLException e) {
						e.printStackTrace();
					}
				}
			}
		}
	}
	

前回とほぼ同じでまず接続までします。そのあと、select文でプリペアードをしていきます。

hanbai_tanka >= ?の?のところに1000という数値を与えます。数値なのでsetIntでやっていますが、文字列ならばsetStringです。

executeQuery()をすると、結果がレコードセットで返ってきます。それを rs.next()で1行づつ展開して表示します。

値の取得は整数はgetInt文字列はgetStringでフィールド名を指定します。

最後にコネクションをクローズして終わりますが、その時にエラーが発生するかもしれないとかなりしつこいコーディングです。

shohin table

結果はこんな感じです。