JDBCとは
JDBCとはJavaからリレーショナル・データベースに接続するための標準インタフェース(API)のことを言う。JavaからDBに接続をする・SQL文を実行する・トランザクションを実行するといったことができる。
JDBCのイメージ
JDBCはJava API、JDBCドライバマネージャー、JDBC DriverAPI、JDBCドライバーが構成要素。
JDBC API
Javaアプリケーションとデータベースのやり取りを行うための標準的なインターフェースで、SQLクエリの実行や、結果セットの取得などを行う。JDBC APIを使用することで、アプリケーション開発者はデータベースの種類に依存しないコードを書くことができる。
JDBCドライバマネージャー
JDBC APIと各データベースのドライバの仲介役。JavaアプリケーションがどのJDBCドライバを使用するかを管理し、適切なドライバに接続を振り分ける。
JDBCドライバ
特定のデータベースに接続する。各データベースベンダーが提供しており、データベース固有の通信プロトコルを使用して接続を確立・管理する。
動作イメージ
Javaアプリケーションがデータベースにアクセスする際、以下の順序で各構成要素が関与する。
- JavaアプリケーションがJDBC APIを通じてデータベース接続やクエリ実行を要求する
- JDBC APIは、この要求をDriverManagerに渡す
- JDBCドライバマネージャーは、ロードされた適切なJDBCドライバを選択する
- 選択されたJDBCドライバが、実際のデータベースとの通信を行う
メソッド紹介
getConnection()
DB接続用のメソッド。
con = DriverManager.getConnection(url,user,parrword)
URLの例
jdbc:mysql://localhost:3306/flmとは何か
createStatement()
ステートメント作成用のメソッド。ステートメントとはJavaアプリケーションからデータベースにSQLクエリを送信し、その結果を取得するためのJDBC APIの一部。
stmt = con.createStatement()
executeQuery()
クエリを実行してデータを取得するメソッド。
res = stmt.executeQuery(sql)
executeUpdate()
クエリを実行してデータを更新するメソッド。
int deleteCount = stmt.executeUpdate(sql)
ResultSetインタフェース
データベースの結果セットを表すデータの表で、通常、データベースに照会する文を実行することによって生成される。
イメージとしては以下。nextメソッドで参照するデータの列を次に移動させることができる。
getxxx()
ResultSetから値を取り出すことができる。取り出し方は以下の2通り。
XXXにはデータ型(IntやStringなど)が入る。
列番号で取り出し
getXXX(index)
列名で取り出し
getXXX(colName)
列番号が可変になる場合もあるので、列名で取り出す方がおすすめ。
close()
接続をクローズするメソッド。
con.close()
preparedStatement()
プリペアードステートメント作成用のメソッド。SQL文中にパラメータプレースホルダー(?)を使用して動的な値を指定することができる。
stmt = con.preparedStatement("SELECT NAME from EMPLOYEE WHERE ID = ?")
ステートメントとプリペアードステートメントの違いは以下。
特長 | Statement | PreparedStatement |
---|---|---|
SQLクエリの実行方法 | 毎回SQL文を解析・コンパイル | 最初に1回だけ解析・コンパイル |
パラメータの使用 | 直接文字列に埋め込む | ? を使用して動的パラメータを設定 |
SQLインジェクション対策 | リスクが高い | 安全 |
パフォーマンス | 毎回コンパイルするため効率が悪い | 一度コンパイルされるため効率が良い |
setXXX
プレースホルダーに値をセットする。XXXにはデータ型(IntやStringなど)が入る。
第一引数に何番目のプレースホルダーか,第二引数にプレースホルダーに入れる値をセットする。
stmt.setInt(1,922104)
トランザクション
トランザクションとは、データベースにおける一連の操作をひとまとめにして、すべて成功するか、またはすべて失敗するかを保証する仕組み。トランザクションに関するメソッドは以下。
自動コミットモードの解除
con.setAutoCommit(false)
トランザクションの確定
con.commit()
トランザクション取り消し
cno.rollback()