Eclipseを使ってJavaからMySQLへ接続する

JavaでMySQLを操作する方法について解説していきます。
今回はWindows環境にXAMPPをインストールしてMySQLを使用します。

#事前準備
・JDKのインストール
・Eclipseのインストール
・XAMPPのインストール
・JDBCドライバの準備

#Eclipseの準備
###1.Javaプロジェクトを作成
左上の**「ファイル(F)」>「新規(N)」>「Javaプロジェクト」** で今回使う新規プロジェクトを作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581663/d40734fa-f721-256a-7a8f-0553b39a8afa.png)
プロジェクト名はわかりやすく**「MysqlTest」**とでもしておきましょう。**「完了(F)」**をクリックして作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581663/2d942a4c-e8df-ad5a-e37a-3be47e35d304.png)

###2.プロジェクトにJDBCドライバを組み込む
プロジェクトが作成できたらプロジェクト上で右クリックをし、 **「ビルド・パス(B)」>「外部アーカイブの追加(V)…」**を選択してJDBCドライバ(mysql-connector-java-8.0.19.jar)を開きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581663/55231fbd-b476-4441-547e-c52e59f2bcdc.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581663/9f9ab233-bb09-a31c-96d6-b31dc0f7ff89.png)
プロジェクト直下の「参照ライブラリ」に**mysql-connector-java-8.0.19.jar**が追加してあれば大丈夫です。

#MySQLの準備
XAMPPを起動し、MySQLを**「Start」**させます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581663/c153db3a-460a-a3fc-1a9d-92c1861e6012.png)
Startできたら右にある**「Shell」**をクリックして起動させます。
起動出来たら以下のコマンドを入力し、rootユーザーでMySQLに接続します。パスワード等の設定は[こちらの記事](https://www.yokkoblog.com/xampp-setting/)を参考にしてください。

```sql:
mysql -u root -p
```
接続ができたら、以下のコマンドでデータベースを作成します。今回は**「test_db」**という名前のデータベースを作成します。

```sql:
CREATE DATABASE test_db;
```
無事に作成できたら、以下のコマンドで今作ったデータベースに接続します。

```sql:
USE test_db;
```
ここまでの流れは以下の画像のとおりです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581663/977216e3-d659-9441-99f3-efbee1e6aea0.png)

次にテーブルを作成し、データを格納していきます。今回は**「test」**というテーブルを作成します。以下のコマンドを入力してください。※コンマを忘れないように！もし、入力ミスをした場合は**「\c」**で中断して新しく入力し直してください。

```sql:
CREATE TABLE test(
    id VARCHAR(3),
    name VARCHAR(10)
);
```

テーブルが作成できたらデータを格納していきます。今回はデータを３行格納してみましょう。

```sql:
INSERT INTO test VALUES('001', 'みかん');
INSERT INTO test VALUES('002', 'りんご');
INSERT INTO test VALUES('003', 'ぶどう');
```
ここまでの流れは以下の画像のようになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581663/e1a0d52c-66f6-a884-5836-327258352bec.png)

きちんとデータが格納されたかどうか以下のコマンドで確認してみましょう。

```sql:
SELECT * FROM test;
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581663/9e33b12e-9bee-944b-5ec8-e93d42add94f.png)
これでMySQLの準備は完了です。

#JavaからMySQLに接続

さて、以上で準備は整いました。ここからはJavaプログラムを作成して、先ほど作成したデータベースにアクセスし、テーブルのデータを表示させてみましょう。

まず、最初に作った**「MysqlTest」**プロジェクトの中にある**「src」**を右クリックし、**「新規(W)」＞「パッケージ」で「java_mysql」**というパッケージを作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581663/ce9bb2fe-92db-c996-e0fe-c96183895bec.png)

次に、今作ったパッケージを右クリックし、**「新規(W)」＞ 「ファイル」**で**「Test.java」**というファイルを作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581663/d99459ae-577c-913b-6e8c-b23ddac23274.png)
ここまで出来たら**「Test.java」**の中身を書いていきます。 コードの意味はコメントで書いておきました。

```java:Test.java
package java_mysql;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class Test {

	public static void main(String[] args) {
    
    // 変数の準備
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;

    // SQL文の作成
		String sql = "SELECT * FROM test";

		try {
			// JDBCドライバのロード
			Class.forName("com.mysql.cj.jdbc.Driver");
			// データベース接続
			con = DriverManager.getConnection("jdbc:mysql://localhost:3306/test_db?serverTimezone=JST", "root", "root");
			// SQL実行準備
			stmt = con.prepareStatement(sql);
			// 実行結果取得
			rs = stmt.executeQuery();

      // データがなくなるまで(rs.next()がfalseになるまで)繰り返す
			while (rs.next()) {
				String id = rs.getString("id");
				String name = rs.getString("name");

				System.out.println(id + ":" + name);
			}
		} catch (ClassNotFoundException e) {
			System.out.println("JDBCドライバのロードでエラーが発生しました");
		} catch (SQLException e) {
			System.out.println("データベースへのアクセスでエラーが発生しました。");
		} finally {
			try {
				if (con != null) {
					con.close();
				}
			} catch (SQLException e) {
				System.out.println("データベースへのアクセスでエラーが発生しました。");
			}
		}
	}

}
```

コードが書き終わったら保存をし、**「Test.java」**を右クリックして**「実行(R)」＞「Javaアプリケーション」**から実行します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581663/3a47ef4e-de58-9cf3-0ffe-21efdc7093b6.png)
コンソールで以下のように表示されていれば成功です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581663/65e62f01-f380-26cb-8167-9a4706322db1.png)