Javaのデータベース操作について
イートスマートの新人エンジニアが、JavaのDB操作について学んだ内容を振り返ってみたいと思います。
大まかなDB操作の流れ
①Connectionでデータベースとの接続を確立。 ②Statement(PreparedStatement)でSQLを実行。 ③ResultSetでSQLの実行した結果にアクセス。
以下、データベースの接続や操作について必要なパッケージ、インターフェースの説明です。
java.sqlについて
リレーショナルデータベースのデータへアクセスし、様々な処理をするAPIを提供。以下で具体的に説明するような機能が含まれている。
Connection
特定のデータベースとの接続を確立する。Connectionのオブジェクトは、自動コミットモードになっており、データベースへの変更が自動保存される。
Statement
SQLを実行し、実行結果を返す。パラメータなしのSQLの実行に用いられ、Connectionから、Statementオブジェクトを生成し、Statementのオブジェクト に対し、executeメソッドでSQLを実行する。
PreparedStatement
パラメータありのSQLの実行に用いられる。パラメータに実際の値を設定する際に、自動でエスケープシーケンスが行われるので、SQLインジェクションの対策になる。 引数として渡すSQLは事前にコンパイルされるため、SQL が多数回実行される場合にも、高速に実行できる。
ResultSet
ResultSetは、Statementの実行の結果、取得したデータへのアクセスができる。さらに、データ(表)の現在行を指すカーソルを保持しており、nextメソッドによって、 カーソルが次行へ移動する。
SQLException
データベースエラーなどの情報を提供(SQL文の誤りなどによって発生する)。
料理教室の先生情報を取得する
上記の説明を踏まえて、データベースへ接続しSQLを実行するコードを組み立てます。
import java.math.BigDecimal; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; public class SelectCookingTeacher { public static void main(String[] args) { Connection conn = null; try { // JDBCドライバを読み込み(ここでは、PostgreSQLを使用する想定) Class.forName("org.postgresql.Driver"); // データベースへ接続(接続先のurlを指定) conn = DriverManager.getConnection( "jdbc:DB接続先","userid","password"); // 実行するSQLを定義(先生のID、名前、会員ステータスを取得するSQL) String sql = "SELECT TEACHER_ID,TEACHER_NAME,MEMBERSHIP_STATUS FROM COOKING_TEACHER"; PreparedStatement pStmt = conn.prepareStatement(sql); // SQL(SELECT文)を実行し、ResultSetで実行結果を受け取る ResultSet rs = pStmt.executeQuery(); // 結果に格納されたレコードをループ処理し、一覧表示(nextメソッドは、ResultSetが提供するメソッド) while (rs.next()) { BigDecimal teacherId = rs.getBigDecimal("TEACHER_ID"); String teacherName = rs.getString("TEACHER_NAME"); String membershipStatus = rs.getString("MEMBERSHIP_STATUS"); // (例)料理教室の先生に関するデータを出力している System.out.println("先生ID:" + teacherId); System.out.println("先生の氏名:" + teacherName); System.out.println("会員区分:" +membershipStatus); } } catch (SQLException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } finally { // データベース切断 if (conn != null) { try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } } }
以上となります。