【Java】MySQLの操作方法（Windows）　その１：DB準備編


#はじめに
Javaでのデータベースの操作方法をまとめました。
当方、初心者ですが、困っている人の助けになればと思います。

本記事では、テスト用のデータベースの準備を行います。

[参考サイト：Javaコード入門](https://java-code.jp/category/database)

[次回記事 →【Java】MySQLの操作方法（Windows）　その２：Javaでの操作](https://qiita.com/ha_ru/items/2e62b3c03b4a0d747018)
#前提
・Windowsを使用
・MySQLをインストール済み
（Pathを通したり、JDBCドライバもインストール済み）
・Eclipseもインストール済み

なお、動作環境は下記の通りです。

| 項目 | 情報 | 備考 |
|:-:|:-:|:-:|
| Java バージョン |  14.0.2 | コマンドプロンプトにて java -version で確認
| MySQL バージョン  | 8.0.24  | コマンドプロンプトにて mysql --version で確認

```
C:\>java -version
java version "14.0.2" 2020-07-14
Java(TM) SE Runtime Environment (build 14.0.2+12-46)
Java HotSpot(TM) 64-Bit Server VM (build 14.0.2+12-46, mixed mode, sharing)

C:\>mysql --version
mysql  Ver 8.0.24 for Win64 on x86_64 (MySQL Community Server - GPL)
```

#準備（データベース）
テストで使用するデータベースとテーブルは下記のSQLファイルを実行する事で、
作成していきます。（作り直しをすぐに出来る様にするため）

**※※ 注意 ※※**
下記のsqlにはデータベースの削除が含まれています。
sampleという名のデータベースが削除されますので、ご注意ください。

```SQL:sampleCreate.sql
/* テストで作り直しが発生しても良いように、すでにsampleという名のデータベースがあればDROP */
DROP Database IF EXISTS sample;

CREATE Database sample;
CREATE table sample.members (
  `id` int(11) NOT NULL,
  `name` varchar(255) NOT NULL,
  `sex` char(1) DEFAULT NULL,
  `age` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

USE sample;
INSERT INTO `members` VALUES (001,'テストタロウ','男',12), (002,'うわさの太郎','男',99), (003,'かわいいあの子','女',20), (004,'いい感じのあの子','女',25);
```

上記のSQLファイルを適当なパスに配置します。
（今回はC:\TEMP\java_sql_testディレクトリ内に配置）

コマンドプロンプトを起動し、下記のように、SQLへログインします。

```
Microsoft Windows [Version 10.0.19041.928]
(c) Microsoft Corporation. All rights reserved.


C:\TEMP\java_sql_test>mysql -u root -p
Enter password: ****
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 11
Server version: 8.0.24 MySQL Community Server - GPL

Copyright (c) 2000, 2021, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>
```
SQLへログイン後、sourceコマンドにてSQLファイルを指定して、実行します。

```
mysql> source sampleCreate.sql
Query OK, 1 row affected (0.05 sec)

Query OK, 1 row affected (0.01 sec)

Query OK, 0 rows affected, 3 warnings (0.03 sec)

Database changed
Query OK, 4 rows affected (0.01 sec)
Records: 4  Duplicates: 0  Warnings: 0

mysql>
```
結果を確認してみます。

```
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mydb               |
| mysql              |
| performance_schema |
| sakila             |
| sample             |  ←sampleというデータベースが作成されている
| sys                |
| world              |
+--------------------+
8 rows in set (0.03 sec)

mysql> use sample
Database changed
mysql> show tables;
+------------------+
| Tables_in_sample |
+------------------+
| members          |  ←membersというテーブルが作成されている
+------------------+
1 row in set (0.01 sec)

mysql> select * from members;                      ←格納されているデータを確認
+----+--------------------------+------+-----+
| id | name                     | sex  | age |
+----+--------------------------+------+-----+
|  1 | テストタロウ             | 男   |  12 |     ←SQLファイルにて準備したデータが入っている
|  2 | うわさの太郎             | 男   |  99 |
|  3 | かわいいあの子           | 女   |  20 |
|  4 | いい感じのあの子         | 女   |  25 |
+----+--------------------------+------+-----+
4 rows in set (0.00 sec)

mysql>
```
これで、テスト用のデータベースの準備が完了しました。

次回、実際に準備したデータベースをJavaを用いて操作していきます。

#番外編
sourceコマンドを使用してテスト用のDB作成中に下記のようなエラーが発生する場合、

```
ERROR 1366 (HY000): Incorrect string value: '\xE3\x82\xBF\xE3\x82\xA4...'
```

日本語のデータをテーブルにINSERTする際にエラーになっているようです。
（文字コードの問題）

MySQLへログインし、statusコマンドを実行し、確認します。

```
mysql> status
--------------
mysql  Ver 8.0.24 for Win64 on x86_64 (MySQL Community Server - GPL)
  ~~
Server characterset:    utf8mb3
Db     characterset:    utf8mb3
Client characterset:    utf8mb3
Conn.  characterset:    utf8mb3
  ~~
--------------
```

utf8ではなく、chcp932(?)などになっている場合、変更が必要です。

変更方法はMySQLの設定ファイルに設定を追加します。
設定ファイルのひな型は"C:\ProgramData\MySQL\MySQL Server 8.0"内に、my.iniがあります。
インストールパスを変更している場合は、異なると思われます。
（なお、programDataフォルダは隠しフォルダなので、表示オプションにて隠しフォルダを表示するに設定してください）

my.iniにて、下記のように設定を変更します。

```my.ini
# CLIENT SECTION
# ----------------------------------------------------------------------
#
# The following options will be read by MySQL client applications.
~~
default-character-set=utf8  ←clientセクションにて、文字コードをutf8に設定
~~
# SERVER SECTION
# ----------------------------------------------------------------------
#
# The following options will be read by the MySQL Server. Make sure that
~~
character-set-server=utf8  ←serverセクションにて、文字コードをutf8に設定
~~
```

変更したファイルはMySQLが起動時に読み込む場所に配置する必要があります。
今回は、"C:\Program Files\MySQL\MySQL Server 8.0\my.ini" に配置しました。
（インストールパスを変更している場合は適切な場所に変更してください。）

[参考：MySQLの文字コードについて（https://qiita.com/YusukeHigaki/items/2cab311d2a559a543e3a）](https://qiita.com/YusukeHigaki/items/2cab311d2a559a543e3a)
[参考：my.iniの場所と配置先（https://www.dbonline.jp/mysql/install/index3.html）](https://www.dbonline.jp/mysql/install/index3.html)

MySQLのサービスを再起動することで、設定が変更されます。

再度、MySQLへログインし、sourceコマンドにてSQLファイルを指定し、
データベースの作成を行うと、データのインポートが完了しました。

[次回記事 →【Java】MySQLの操作方法（Windows）　その２：Javaでの操作](https://qiita.com/ha_ru/items/2e62b3c03b4a0d747018)