EclipseでMySQLを使う


#概要
MySQLで作成したデータベースの中身をEclipse（Java）で使えるようにする
詰まったことがあったので備忘録

#バージョン等
Windows10

Eclipse : 2021-06 (4.20.0)
Java : Java11
MySQL : 5.7.33

# 目次
<!-- タイトルとアンカー名を編集 -->
1. [Javaプロジェクト作成](#Chapter1)
1. [プロジェクトにMySQLライブラリの追加](#Chapter2)
1. [MySQLからDBの値を取り出す](#Chapter3)
1. [エラー対処](#Chapter4)



<!-- 各チャプター -->
<a id="#Chapter1"></a>
# 1.Javaプロジェクト作成
DBtestという名前でプロジェクトを作成する。
今回はモジュールファイルも使用するので作成する。
**Eclipse2021の場合は下画像のように「モジュール->module-info.javaファイルの作成」に✓を入れないとファイルが作成されないので注意**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/929533/eee2b04c-9ce7-2c57-6af8-f95a256f850b.png)

モジュールファイルの名前の先頭は小文字である必要があるみたいなのでDをdに変更
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/929533/6642724c-003b-678e-ec66-5c421780ba98.png)

プロジェクト作成後
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/929533/abc85d51-3769-9f4a-898a-ebfab5a14c3b.png)


<a id="#Chapter2"></a>
# 2.プロジェクトにMySQLライブラリの追加
MySQLのライブラリを使うためにファイルのパスを通す。
DBtestを選択後右クリックで下画像のような選択画面を出し、「ビルドパス->ビルドパスの構成」を選択する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/929533/42bd3f40-8df8-eeff-61e5-4050476d3503.png)

選択後、下画像のような画面が出てくる。
クラスパスを選択し、「外部Jarの追加」を押す。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/929533/8cb9d86c-72f0-19a5-0869-ca069d561610.png)

ボタン押下後ファイルの選択画面が出てくるのでC:\Program Files (x86)\MySQL\Connector J 8.0フォルダ内（人によってフォルダの場所は異なる可能性がある）のmysql-connector-java-8.0.23.jarファイルを選択し、開くボタンを押す。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/929533/b5fa486d-1c47-28d7-a46d-ba937b2e26d8.png)

開くボタン押下後、下画像のようになる。
適用して閉じるボタンを押す。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/929533/47d85e19-3346-e530-2d66-b0e23c4efe90.png)

プロジェクトフォルダ内に参照ライブラリーが新たに存在していることが確認できる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/929533/be0740a9-5533-ca6a-fdc4-2f4b104e54ea.png)





<a id="#Chapter3"></a>
# 3.MySQLからDBの値を取り出す
まず下画像のようにJavaクラスを作成する。
名前はMain パッケージ名はdbtest
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/929533/07fe31fe-8e3e-b144-e101-d72cb917e94e.png)

その作成したMain.javaに以下のコードをコピペする。
このファイルをJavaアプリケーションで実行するとMySQLの値を取り出すことができる。

```java
package dbtest;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class Main {
    public static void main(String[] args) throws SQLException {
        String url = "jdbc:mysql://localhost/<DBのなまえ>?useSSL=false&serverTimezone=Japan";
        String user = "<ゆーざめい>"; // データベースの接続ユーザ名
        String password = "<ぱすわーど>"; // 自分の環境のMySQLのパスワード
        
        // データベース接続を確立
        Connection conn = DriverManager.getConnection(url, user, password);
        
        // 学生テーブルの中身を取得
        String sql = "select * from <テーブル名>";
        Statement stat = conn.createStatement();
        ResultSet rs = stat.executeQuery(sql); 
        
       /*DB構造が以下のような場合
         | 学籍番号 |    名前      |  フリガナ  |　性別 |
         | 1        |     田中     |  タナカ  　|  男   |
         | 2        |     佐藤     |  サトウ    |   女  |
 
         実行結果
　　　　  1 田中 タナカ 男
          2 佐藤 サトウ 女
       
       */
        


        while(rs.next()) {
            String id = rs.getString(1);
            String name = rs.getString(2);
            String kana = rs.getString(3);
            String gender = rs.getString(4);
            System.out.printf("%s %s %s %s%n", id, name, kana, gender);
        }
        // データベース接続を閉じる
        conn.close();
    }
}
```






<a id="#Chapter4"></a>
# 4.エラー対処
エラーが多々起こったのでその対処法

##その１

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/929533/51c2481b-d3ef-88dc-c599-aeb7d5ef14c1.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/929533/a24ead9c-988a-7e90-eed4-000334c6ea2b.png)

###対処法
modlue-info.javaを以下のように変更

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/929533/b0f4878d-12c8-4b97-0093-cad2498d1aa8.png)


##その２
Main.javaを実行後以下のようなエラー

```
Exception in thread "main" java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '??' at line 1
    at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:120)
    at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122)
    at com.mysql.cj.jdbc.StatementImpl.executeQuery(StatementImpl.java:1198)
    at dBtest/dbtest.Main.main(Main.java:24)
```
###対処法
Main.java内のurl変数に「&useUnicode=true&characterEncoding=utf8」を追加する。

```Java
//変更前
String url = "jdbc:mysql://localhost/<DBのなまえ>?useSSL=false&serverTimezone=Japan";
//変更後
String url = "jdbc:mysql://localhost/<DBのなまえ>?useSSL=false&serverTimezone=Japan&useUnicode=true&characterEncoding=utf8";
```



<a id="#reference"></a>