概要
MySQLで作成したデータベースの中身をEclipse(Java)で使えるようにする
詰まったことがあったので備忘録
バージョン等
Windows10
Eclipse : 2021-06 (4.20.0)
Java : Java11
MySQL : 5.7.33
目次
1.Javaプロジェクト作成
DBtestという名前でプロジェクトを作成する。
今回はモジュールファイルも使用するので作成する。
Eclipse2021の場合は下画像のように「モジュール->module-info.javaファイルの作成」に✓を入れないとファイルが作成されないので注意
モジュールファイルの名前の先頭は小文字である必要があるみたいなのでDをdに変更
2.プロジェクトにMySQLライブラリの追加
MySQLのライブラリを使うためにファイルのパスを通す。
DBtestを選択後右クリックで下画像のような選択画面を出し、「ビルドパス->ビルドパスの構成」を選択する。
選択後、下画像のような画面が出てくる。
クラスパスを選択し、「外部Jarの追加」を押す。
ボタン押下後ファイルの選択画面が出てくるのでC:\Program Files (x86)\MySQL\Connector J 8.0フォルダ内(人によってフォルダの場所は異なる可能性がある)のmysql-connector-java-8.0.23.jarファイルを選択し、開くボタンを押す。
開くボタン押下後、下画像のようになる。
適用して閉じるボタンを押す。
プロジェクトフォルダ内に参照ライブラリーが新たに存在していることが確認できる。
3.MySQLからDBの値を取り出す
まず下画像のようにJavaクラスを作成する。
名前はMain パッケージ名はdbtest
その作成したMain.javaに以下のコードをコピペする。
このファイルをJavaアプリケーションで実行するとMySQLの値を取り出すことができる。
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();
}
}
4.エラー対処
エラーが多々起こったのでその対処法
その1
対処法
modlue-info.javaを以下のように変更
その2
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」を追加する。
//変更前
String url = "jdbc:mysql://localhost/<DBのなまえ>?useSSL=false&serverTimezone=Japan";
//変更後
String url = "jdbc:mysql://localhost/<DBのなまえ>?useSSL=false&serverTimezone=Japan&useUnicode=true&characterEncoding=utf8";