1
1

スッキリわかるJava入門 実践編 第3版 まとめ - part9 -データベースアクセス

Last updated at Posted at 2023-10-06

はじめに

こんにちは ◤●ㅅ●◥ノ

今回はデータベースアクセスについて学びました!

第9章 データベースアクセス

1.データベースとは

本格的なプログラムの保存先
データベースの実体
→常時稼働してデータの格納や検索に関する要求を待ち受けるプログラム
 →このプログラムのことを データベース管理システム と呼ばれている

特にデータを複数の表の形で整理して保存、管理する
→ リレーショナルデータベース(RDB)

JavaからRDBに対してデータの読み込みや書き込みを行うためには SQL 
というデータベースを操作する専用の言語で書かれた命令をRDBに送る

:star: データベースを使うメリット
・データベースを使うと、複雑なデータ検索や書き込みも簡単に行える
・Javaプログラムの中で複雑なデータ処理を記述する必要がない

2.データベースの基本操作

データベースはデータを管理するために複数の表を内部に保持されている
表は列と行で構成され、1つの行が1件のデータに相当し、列はデータの要素に相当する

4つの基本操作

・検索 SELECT
・挿入 INSERT
・更新 UPDATE
・削除 DELETE

データベース利用のためのAPI

JavaではJDBCというデータベース操作専用のAPIが用意されている

・DriverManager
DBMSへの接続準備のために利用する
・Connection
 DBMSへの接続や切断の際に利用する
・PreparedStatement
 SQL文を送信する際に利用する
・ResultSet
 DBMSから検索結果を受け取る際に利用する

3.データベースの接続と切断

JDBCを含むすべてのプログラムで共通することが
「接続」→「SQL送信」→「切断」
の3つのステップ
+準備段階の4つのステップが必要となる

step0 事前準備

1.JDBCドライバの準備
2.JDBCドライバのロード

JDBCドライバの有効化
Class.forName(JDBCドライバの完全限定名);

step1 接続の確率

Javaプログラムからデータベースへの接続を確率するには
以下の構文を利用してjava.sql.Connectionのインスタンスを取得する
con = DriverManager.getConnection(JDBC URL);
con = DriverManager.getConnection(JDBC URL,ID,PW);

JDBC URL
→「データベース接続先を指定する文字列」

step2 SQL処理

大きく2つのパターンに分かれる
INSERT,UPDATE,DELETEの更新系
SELECTの検索系
を送るかになる
詳しくは4.更新系SQL文の送信以降の部分になる

step3 接続の切断

データベースの切断はConnectionのclose()を呼ぶだけ
close()はfinallyブロックに記述する

4.更新系SQL文の送信

更新系のSQL文には「何行分の処理に成功したか」を表す
単純な数字だけがデータベースから返されるという共通の特徴がある

更新系のSQL文の送信処理は以下の4つの手順で処理を行う
1.送信すべきSQL文のひな形を準備する
2.ひな形に流し込んでSQL文を組み立てる
3.組み立て終えたSQL文をDMBSに送信する
4.処理結果を判定する

step2.1-1.SQL文のひな形の準備

PreparedStatement pstmt = con.prepareStatement(SQL文のひな形);

step2.1-2.ひな形に値を流し込む

pstmt.setInt(パラメータ番号、数値);
pstmt.setString(パラメータ番号、文字列);

step2.1-3.SQL文をDBMSに送信する

送信にはPreparedStatementのexecuteUpdateメソッドを利用する
int r = pstmt.executeUpdate();

step2.1-4.成否判定を行う

executeUpdate()の戻り値が、想定された数値であれば成功
すべての処理が終わったところで、PreparedStatementのclose()を読んで忘れずに後片付けをする

5.検索系SQL文の送信

検索系SQL文の送信処理は、次のようになる
1.送信すべきSQL文のひな形を準備する
2.ひな形に値を流し込んでSQL文を組み立てる
3.組み立て終えたSQL文をDMBSに送信する
4.ResultSetを使い、結果表からデータを取り出す

SQLの雛形を作り、値を流し込んで組み立てるまでは更新系SQL文と全く同じ
送信のみ違うのでその手順が以下のもの

step2.2-3.検索系SQL文の送信

ResultSet rs = pstmt.executeQuery();

executeQuery()を呼び出すと、すぐにSELECT文がデータベースに送られ、結果が返ってくる

6.結果表の処理

Resultsetは注目している特定の1行の情報しか取り出すことができない
JDBCにおけるResultSetは次の手順で利用することができる
1.next()で注目行を1つずつ先に進める
2.get()~で必要な列の情報を取り出す

ResultSet利用のイディオム
※イディオムは2つ以上の語が結びついて特殊な意味を持つ言葉のこと
while(rs.next()) 検索結果の全行を順に処理
if(rs.next()) 検索結果があるかないかを判定

7.JavaとDBのデータ型

日時情報の取り扱いには注意が必要
データベースの日時情報は日付情報だけもち、時刻情報は保持しない
→jaba.util.Date型の情報はデータベースでは両方を保持するTIMESTAMP型を利用する

8.トランザクション処理

データベースにはファイルにはない特徴がある
その中の代表的な機能が トランザクション
→プログラムからデータベースに送信する1つ以上のSQL文の要求を1つのグループとして扱う考え方

DBMSは以下のようなトランザクション制御を行う
:star: データベースのトランザクション制御
同一トランザクションに属するSQL文の処理要求が複数ある場合
・すべてが成功して初めて処理結果を確定する(コミット)
・途中で失敗したら、トランザクション実行前の状態に戻す(ロールバック)

データベースの処理を確定させること→ コミット
実行前の状態に戻すこと→ ロールバック

トランザクションの利用

JDBCを用いてトランザクション制御を指示するにはデータベース接続時に取得したConnectionを利用する
具体的には以下の3つのメソッドを適切なタイミングで使用する

:pencil2: 自動コミットモードの解除
JDBCの初期状態ではトランザクション制御がなされない状態になっている
次の構文を使うことで明示的にトランザクション制御を行うことができる

con.setAutoCommit(false);

:pencil2: 送信済みの処理要求の確定(コミット)
一連のトランザクションに必要なSQL文をすべて送ったらコミットをする
con.commit();

:pencil2: 送信済みの処理要求のキャンセル
複数のSQL文の要求を送信している途中でキャンセルしたい時
con.rollback();

まとめ

データベースには検索性能、並列実行、トランザクション制御などファイルにはない特徴を持つ
リレーショナルデータベース(RDB)はデータを表形式で管理する
RDBはSQLという専用の言語で書かれた命令を使って操作する
SQLでは、検索、挿入、更新、削除の4つの基本的な操作を行うことができる
データーベースにSQL文を送信するにはJDBCというAPIを利用する

今回もありがとうございました!
ではまた〜 ◤●ㅅ●◥ノ"

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1