【Java】dockerを使ってMySQLをいじってみる

この記事の目標

dockerを使ってMySQLのコンテナを用意。JavaのJDBCドライバを使用してMySQLのコンテナへ接続する。

この記事でわかること

  • dockerを使ったMySQLコンテナの立て方
  • Javaを使って上記のMySQLコンテナに接続する
  • そのためのJDBCのダウンロード方法及びEclipseでの使用方法

前提条件と動作環境

前提条件

  • dockerをなんとなく知っている、インストール済み
  • Java触ったことある
  • MySQLがデータベースであることを知っている

動作環境

  • macOS Catalina 10.15.7
  • java 8
  • Docker version 20.10.2

MySQLコンテナの準備

まずはdockerを使ってMySQLコンテナを準備します。dockerがインストールされている状態でターミナルなどを使って以下コマンドを実行してください。

docker run -it -p 3306:3306 --name test-mysql -e MYSQL_ROOT_PASSWORD=rootpass -d mysql:latest

このコマンドによってMySQLのコンテナが作られます。MYSQL_ROOT_PASSWORD=の後に入れた文字列がrootユーザーのパスワードになります。今回の例ではrootpassとしましたが、ここはなんでもいいです。また「-p 3306:3306」によってホストとコンテナをポート3306同士でつないでいます。これによってJavaからの接続が可能になります。

次に以下のコマンドでコンテナの中に入り込みます。

docker exec -it test-mysql bash

コンテナの中に入ったらさらにそこで以下コマンドを実行してMySQLを使います。コマンドを実行するとパスワードが求められるので先ほどMYSQL_ROOT_PASSWORD=の後に入れた文字列を入力してログインしてください。

mysql -u root -p

中に入ったら「show databases;」などのコマンドでMySQLが正常に動いているか確認してみてください。

動いていることが確認できたらサンプルのデータベース、テーブルを作成し、その中にデータを打ち込んでみます。以下のSQL文を順番に実行してみてください。

create database testdb;
use testdb;
create table test_table(id int, name varchar(50));
insert into test_table values (1, 'Taro');
insert into test_table values (2, 'jiro');
insert into test_table values (3, 'saburo');
select * from test_table;

最後のコマンドを実行した後に以下のような出力がされたらMySQLの準備は終わりになります。

+------+--------+
| id   | name   |
+------+--------+
|    1 | Taro   |
|    2 | jiro   |
|    3 | saburo |
+------+--------+



JDBCのダウンロード

ここからMySQLのJDBCをダウンロードすることができます。Macを使っている場合は「Select Operating System:」のところは「Platform Independent」を選択してください。その後表示が変化するのでTarもしくはZipのどちらかをダウンロードし、解凍してください。

Eclipsを起動し新規プロジェクトを作成してください。筆者はTestMySQLというプロジェクト名にしました。プロジェクト名を右クリックし、ビルド・パス、ビルド・パスの構成を選択してください。

 



その後タブが出てくるのでライブラリーを選択、外部JARの追加を押して先ほどダウンロードしたJDBCのjarファイルを選択して追加してください。

舞台は整いました。あとはプログラムを書いて実行してみましょう。

 



サンプルコード

先ほど作成したtest_tableの中身を表示してみたいと思います。TestMySQLプロジェクトにpackageがsampleのTestクラスを作成ました。細かいコードの解説をしていると長くなってしまうので今回は例を示すだけで終わって、別の記事でJDBCドライバの使い方を解説していこうと思います。

package sample;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class Test {

	public static void main(String[] args) {
		// TODO 自動生成されたメソッド・スタブ
		try (Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/testdb", "root", "rootpass");
				Statement statment = con.createStatement();
				ResultSet res = statment.executeQuery("select * from test_table")){
			while(res.next()) {
				System.out.println(res.getInt("id") + ":" + res.getString("name"));
			}
		}catch (SQLException e) {
			e.printStackTrace();
		}
	}
}

これを実行すると以下のように、テーブルに入れていた値を取得することができます。

1:Taro
2:jiro
3:saburo

コメント

タイトルとURLをコピーしました