【実践‼】Javaデータベース連携（Connector/J 8.0.20）

## 1.事前知識
- [【最新】UbuntuでJavaの環境を構築する方法](https://qiita.com/ryome/items/37c53e9638a9c6ea146a)

- [【初心者でもできる‼】Windows10にJava環境を作る方法（JDK14.0.1）](https://qiita.com/ryome/items/30135570954e36196821)

- [【わかりやすく解説‼】Javaのインスタンスの使い方](https://qiita.com/ryome/items/62ba0d8395af6698053a)

- [【初心者でもできる‼】Windows10にEclipseをインストールする方法（Java環境構築）](https://qiita.com/ryome/items/b47c5acdaa52cffbec58)

- [【初心者でもできる‼】Windows10にMySQLをインストールする方法（MySQL Server 8.0.20）](https://qiita.com/ryome/items/68766f81f0668ff6876b)

事前知識として、上記リンクの内容が必要です。

## 2.事前準備
![22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449867/73a0e22e-c500-a42a-f60f-82f6ddc13bb3.png)
![23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449867/351c92f9-efad-b067-c284-7f8cf28112bb.png)
1. 検索ボックスに `cmd` と入力し、 `コマンドプロンプト` を起動する。
![07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449867/fc39c144-8c41-da1f-c6c7-9040df3cd469.png)
2. `mysql -u ユーザ名 -p` で `ログイン` する。
![08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449867/36e7e29a-dd1f-4076-22d7-943c76b11da3.png)
![09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449867/5a46a7cf-01d4-0eb2-652e-d8ec41cfa1ef.png)

```SQL:test.sql
create database test DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

CREATE USER 'test'@'localhost' IDENTIFIED BY 'test';
GRANT ALL PRIVILEGES ON test.* TO 'test'@'localhost';

use test;

CREATE TABLE test1( 
    id TINYINT ZEROFILL NOT NULL AUTO_INCREMENT,
    name VARCHAR(50),
    PRIMARY KEY(id));

INSERT INTO `test1`(`name`) VALUES ("test1");
INSERT INTO `test1`(`name`) VALUES ("test2");
INSERT INTO `test1`(`name`) VALUES ("test3");
INSERT INTO `test1`(`name`) VALUES ("test4");
```
2. 上記の `SQL文` をコピーし、 `コマンドプロンプト` 内で実行する。
3. 画像のように `Query OK` が出れば成功。


## 3.Connectorのインストール
![01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449867/86db67d0-8cf6-1ba0-2816-1a9cbf90c134.png)
1. [MySQL :: Download Connector/J](https://dev.mysql.com/downloads/connector/j/) へアクセスする。
2. `Platform Independent` を選択し、 `Downloads` ボタンをクリックする。
![02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449867/1a0ef661-113c-0d3b-6e49-56f0379f9380.png)
3. `No thanks, just start my download.` をクリックする。
![03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449867/b8bf4bc6-5c60-f7aa-301c-add458ab3b82.png)
4. ZIPファイルを `展開` する。　　　
![04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449867/5f0783eb-cf30-e9db-6932-caaf95c94f83.png)
5. ZIPファイルが `展開` され、 `mysql-connector-java-8.0.20` が存在することを確認する。
![05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449867/eee3d4ae-73c1-5cc8-3644-5671baa9d253.png)
6. `C:\Program Files\MySQL` に `mysql-connector-java-8.0.20` を移動する。

## 4.Javaデータベース連携

![01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449867/433a59e6-de44-cc00-99cc-57b0c59b5850.png)
1. Eclipseを再起動後、 `[新規(N)]→[Javaプロジェクト]` を選択する。
![02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449867/d1a0a14b-efd1-0fff-3d72-fd00eb9b0e31.png)
2. プロジェクト名に `TestDB` と入力し、実行環境JREの使用を `JavaSE-1.8` を選択して、 `完了` ボタンをクリックする。
![03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449867/77bf387a-f038-05ff-0aa8-27a01acac1e6.png)
3. `[新規(N)]→[クラス]` を選択する。　　　
![04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449867/7da6e31c-c654-90c2-0ece-b2fcbb5ca73b.png)
4. パッケージに `db`, 名前に `Test1` と入力し、 `public static void main(String[] args)` にチェックを付け、 `完了` ボタンをクリックする。
![05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449867/2cdc1794-7d1b-ca06-13fc-908113c238b0.png)
5. プロジェクトを `右クリック` して  `[ビルド・パス(B)]→[外部アーカイブの追加(V)]` を選択する。
![06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449867/235b1174-efff-0def-f2b7-81299bac513b.png)
6. `C:\Program Files\MySQL\mysql-connector-java-8.0.20` の `mysql-connector-java-8.0.20.jar` を選択する。

```java:Test1.java
package db;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class Test1 {
	public static void main(String[] args) {
		try {
		       Class.forName("com.mysql.cj.jdbc.Driver");
		       Connection conn = DriverManager.getConnection(
		               "jdbc:mysql://localhost/test?characterEncoding=UTF-8",
		               "test",
		               "test"
		               );
		       Statement st = conn.createStatement();
		       ResultSet rs = st.executeQuery("select * from test1");

		       while(rs.next()) {
		           int id = rs.getInt("id");
		           String name = rs.getString("name");
		           System.out.println("ID："+id+" 名前:"+name);
		       }
		       rs.close();
		       st.close();
		       conn.close();
		       System.exit(0);
		   } catch (ClassNotFoundException e) {
		       System.out.println("ドライバを読み込めませんでした "+ e);
		   } catch (SQLException e) {
		       System.out.println("データベース接続エラー"+ e);
		   }
	}
}
```
7.上記の文をコピーして、文字コードは `S-JIS` を指定し、ファイル名を `Test1.java` で保存する。
![07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449867/91988a64-fa14-d208-7bf0-e51680cc7821.png)
8. `[実行(R)]→[実行(S)]→[Javaアプリケーション]` を選択する。
![08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449867/b0ed0731-3b2c-1e89-959e-7f2701fb1f06.png)
9. 画像のように表示されれば成功。


## 5.Javaデータベース連携の基本的な書き方

```PHP:Javaデータベース連携
public class クラス名 {
    public static void main(String[] args) {
        try {
               // JDBCドライバクラス名
               Class.forName("com.mysql.cj.jdbc.Driver");
               // コネクションを取得
               Connection Connection型変数名 = DriverManager.getConnection(
                       "jdbc:mysql:URL",
                       "DBユーザー名",
                       "パスワード"
                       );
               // Statementクラスのオブジェクトを取得
               Statement Statement型変数名 = Connection型変数名.createStatement();
               // SQLを実行する
               ResultSet ResultSet型変数名 = Statement型変数名.executeQuery("SQL文");

               while(rs.next()) {
                   // SQLの表示
               }
               ResultSet型変数名.close();
               Statement型変数名.close();
               Connection型変数名.close();
               System.exit(0);
           } catch (ClassNotFoundException e) {
               // ドライバの読み込み失敗
           } catch (SQLException e) {
               // データベースの接続に失敗
           }
    }
}
```

- 基本的な `Javaデータベース連携` は上記のように記述します。

## 6.GitHub
GitHubにソースコードを公開しています。

https://github.com/ryomeblog/qiita/tree/master/%E3%80%90%E5%AE%9F%E8%B7%B5%E2%80%BC%E3%80%91Java%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9%E9%80%A3%E6%90%BA


## 7.関連
- [【覚えておくと便利!!!】Eclipseにおけるコンストラクタとgetter/setterの簡易作成](https://qiita.com/ryome/items/6c487ccc0c39847cd55f)
- [【覚えておくと便利!!!】Eclipseにおける継承クラスの簡易作成](https://qiita.com/ryome/items/4fcf62b4bc60fb6a4d07)
- [【覚えておくと便利!!!】MySQLの文字コード変更](https://qiita.com/ryome/items/b1f0f7055d2d614fb605)
- [【初心者でもできる‼】Javadocの書き方](https://qiita.com/ryome/items/4f2d5928c8aaf195f407)
- [【わかりやすく解説‼】Javaのオーバーロードの使い方](https://qiita.com/ryome/items/f1ca8cc7538f4c6d26c0)
- [【わかりやすく解説‼】Javaのカプセル化の使い方](https://qiita.com/ryome/items/fc44dfad297b35bf7559)
- [【わかりやすく解説‼】Javaの継承の使い方【オーバーライドの解説あり】](https://qiita.com/ryome/items/97b82c5519e39d3f21c1)
- [【わかりやすく解説‼】Javaにおける参照型の型変換](https://qiita.com/ryome/items/2453949b978bf166e204)
- [【わかりやすく解説‼】Javaのポリモーフィズムの使い方](https://qiita.com/ryome/items/a22457797988c548ec62)
- [【わかりやすく解説‼】ArrayListの使い方【Java】](https://qiita.com/ryome/items/cc01a7b6914e5b8b1579)
- [【実践‼】JFrameの導入（画面作成まで解説）](https://qiita.com/ryome/items/a45e0db4f7456e62d8d8)