🧑‍🎓

JavaとDBの「つながる仕組み」

に公開

Javaとデータベースはどうつながってる?


「このコードってどうやって動いてるんですか?」

Javaでデータベースに値を登録する処理を見たとき、そんな素朴な疑問がわいた。
なんとなく setString()executeUpdate() を使っていたけど、実際に何が起きているのかは意外と曖昧だったりする。


まずはコード全体を見てみよう

以下は、データベースに新しいユーザ情報を登録するシンプルなコードだ。

try (Connection conn = DriverManager.getConnection(DB_URL, DB_USER, DB_PASS);
     PreparedStatement stmt = conn.prepareStatement(
         "INSERT INTO users (username, email, password) VALUES (?, ?, ?)"
     )) {

    stmt.setString(1, "taro");
    stmt.setString(2, "taro@example.com");
    stmt.setString(3, "securepass123");

    stmt.executeUpdate();

} catch (SQLException e) {
    e.printStackTrace();
}

どこで、何をしているの?

ここから先は、ある日の勉強会での実際の対話。
先輩エンジニアが、行ごとにこのコードをほどいてくれた。


Y「Connectionとか PreparedStatementとか、名前は知ってるけど、正直フワッとしてます…」

I「じゃあこのコードを、“電話をかけて、話して、切る”っていう流れにたとえてみようか」


電話をかける:データベースとの接続(Connection)

Connection conn = DriverManager.getConnection(DB_URL, DB_USER, DB_PASS);

これは、「このデータベースに接続します」という処理。
DriverManager は電話帳のようなもので、指定された情報(URL・ユーザー名・パスワード)を使って、正しいデータベースへつないでくれる。


話す内容を準備する:命令を用意(PreparedStatement)

PreparedStatement stmt = conn.prepareStatement(
    "INSERT INTO users (username, email, password) VALUES (?, ?, ?)"
);

次にやることは、「話す内容を準備する」こと。
ここで言う“話す内容”とは、SQL文のこと。
? は「あとで値を差し込む場所」で、SQLインジェクションを防ぐためにも重要な書き方になる。


話したいことを詰める:値のバインド

stmt.setString(1, "taro");
stmt.setString(2, "taro@example.com");
stmt.setString(3, "securepass123");

ここで、準備していた ? の部分に実際の値を当てはめていく。
順番はSQL文中の ? の位置に対応している。
これで、「どんな命令を誰に対して実行するか」が具体的になる。


実行する:命令を送信(executeUpdate)

stmt.executeUpdate();

いよいよ、準備した命令を“話す”瞬間。
この一文でSQLが実行され、データベース側に新しいユーザ情報が登録される。


電話を切る:リソースの自動解放(try-with-resources)

try (Connection conn = ...; PreparedStatement stmt = ...) {
    ...
}

try-with-resources構文を使うと、tryブロックを抜けたときに、conn.close()stmt.close()が自動的に呼ばれる。
つまり「電話を切る」のも忘れないように、Javaが気を利かせてやってくれるというわけ。


まとめ:JavaからDBに話しかける5ステップ

Y「なるほど…!JavaとDBのやり取りって、ちゃんと順を追えば“話す”みたいに見えてくるんですね」

I「そう。慣れると、接続 → 命令準備 → 値バインド → 実行 → 終了処理 っていう5ステップが頭に入って、どんなSQLでも落ち着いて書けるようになるよ」

Y「すごく視界が開けた気がします。これからもっと色んなSQLを触ってみたくなりました!」

I「それが一番の学びだね。コードは“読めば読むほどしゃべってくる”から、楽しんでな」

Discussion