Databaseの利用
コンテキストルートのlibフォルダに配置したJDBCドライバを使い、DBを操作する。
DB利用の構成
JavaAP ~ JDBC ~ DBMS

JDBC(Java DataBase Connectivity)
JDBCはJavaアプリケーションに、特定のDBMSに依存しないインタフェースを提供
JDBCの構成
JDBC API ~ JDBCドライバマネージャ ~ JDBCドライバ API ~ JDBCドライバ
JDBC API
Java標準ライブラリ(JavaAPI)含まれる。
DBMSへの汎用的アクセスを提供
プログラマは、java.sql パッケージ内のクラスを使い、DBにアクセス
JDBCドライバマネージャ
利用可能なJDBCドライバを管理し、適切なJDBCドライバを用いてDBに接続する。
java.sql.DriverManager クラス
JDBCドライバとJDBCドライバマネージャを分けて、DBMSに依存しない環境を提供
JavaAPとのインタフェース(JDBC API)を持つ。
JDBCドライバ
実際にDBに接続し、その後のDBアクセスを実行
JDBCドライバマネージャとのインタフェース(JDBCドライバ API)を持つ。
インタフェースの種類に応じてタイプ1~4がある。

JDBCを利用したデータベース操作
データベースに接続
SQLステートメントの用意
SQLステートメントの実行
実行結果の受け取り
データベースの切断

WebコンテナにおけるDatabaseの接続
java.sql.DriverManagerクラスを使うDatabase接続
Webコンテナ内から、DriverManager.getConnectionメソッドを呼び出す。
事前に、使用するドライバに対応するクラス名をClass.forNameメソッドで指定する。
データソースを使うDatabase接続
Webコンテナによってコネクションプーリングが行われる。

SQLステートメントの用意
ConnectionオブジェクトのprepareStatementを用いる。
引数として、あらかじめプレースホルダを含んだSQL文を指定できる。
createStatementでもよい。(SQLインジェクション攻撃のリスク大)

SQLステートメントの実行
StatementオブジェクトのexecuteQueryを用いる。

実行結果の受け取り
ResultSetオブジェクトとして返される。

Databaseを利用したレスポンスの生成
DBから取得した情報を扱いやすいオブジェクトに変換し、適切なスコープに格納する。
スコープに格納された情報を取得して、レスポンスを生成
DTO

トランザクション
関連する複数の処理をひとまとめにしたもの
トランザクションに含む複数の処理は、全て実行するか、すべて実行しないようにする。

トランザクション制御
Connectionの確率
自動コミットモードの無効化
デフォルト:有効 トランザクション処理
コミット/ロールバック
Connectionのクローズ

DAO(Data Access Object)
データベースアクセス部分のコードを分離して実装
必要なデータにアクセスするためのメソッドを定義
発生する可能性がある例外の処理を、すべてメソッドの呼び出し元に任せる。

ConnectionManager
データベースへの接続(コネクション)を取得、管理する。
「データベースへの接続」と「その他の操作」分離
コネクションプーリングで処理時間の軽減

DTO(Data Transfer Object)
ひとまとまりのデータの受け渡しを目的としたクラス
データを格納するフィールドと、それらにアクセスするためのメソッドを定義
ゲッター、セッター