質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

JAR

JAR(又はJava ARchive)はコンパイルされた複数のJavaバイトコード及び関連ファイルのリソースを一つのファイルに統合したものです。JARファイルはZIPファイルのフォーマットで構築されています。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

Tomcat

TomcatはApache Software Foundation (ASF)で開発されたオープンソースのWebコンテナです。

Q&A

解決済

1回答

4242閲覧

eclispse上のjavaファイルからmysqlにあるデータベースへ接続できない

s1123

総合スコア1

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

JAR

JAR(又はJava ARchive)はコンパイルされた複数のJavaバイトコード及び関連ファイルのリソースを一つのファイルに統合したものです。JARファイルはZIPファイルのフォーマットで構築されています。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

Tomcat

TomcatはApache Software Foundation (ASF)で開発されたオープンソースのWebコンテナです。

0グッド

0クリップ

投稿2021/02/14 04:38

前提・実現したいこと

学校のPCの環境下から、eclispse上のjavaファイルからmysqlにあるデータベースへ接続したいのですが、
"java.lang.UnsupportedClassVersionError: com/mysql/jdbc/Driver : Unsupported major.minor version 52.0"というエラーが出てしまい、接続できません。

発生している問題・エラーメッセージ

以下のエラーメッセージは自宅環境下で無理やり起こしたものなので、もしかしたら細かいエラーの内容は違うかもしれませんが、大方同じようなエラーだと思います。

Exception in thread "main" java.lang.UnsupportedClassVersionError: com/mysql/jdbc/Driver : Unsupported major.minor version 52.0 at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClassCond(ClassLoader.java:637) at java.lang.ClassLoader.defineClass(ClassLoader.java:621) at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141) at java.net.URLClassLoader.defineClass(URLClassLoader.java:283) at java.net.URLClassLoader.access$000(URLClassLoader.java:58) at java.net.URLClassLoader$1.run(URLClassLoader.java:197) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:190) at java.lang.ClassLoader.loadClass(ClassLoader.java:306) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) at java.lang.ClassLoader.loadClass(ClassLoader.java:247) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:171) at lessonA.DBConnect.getConnection(DBConnect.java:55) at lessonA.DBConnect.main(DBConnect.java:48)

該当のソースコード

色々と試していたので、コメントアウトが多く申し訳ございません。

JAVA

1package lessonA; 2 3import java.sql.Connection; 4import java.sql.DriverManager; 5import java.sql.SQLException; 6 7public class DBConnect { 8 public static void main(String[] args) { 9 10 /*Connection conn = null; 11 String url = "jdbc:mysql://localhost:3306/test_db"; 12 String user = "root"; 13 String password = "root"; 14 15 try { 16 conn = DriverManager.getConnection(url, user, password); 17 18 // データベースに対する処理 19 //System.out.print("DB接続成功!"); 20 21 Statement stmt = conn.createStatement(); 22 String sql = "SELECT * FROM test_table"; 23 ResultSet rs = stmt.executeQuery(sql); 24 25 while (rs.next()) { 26 int id = rs.getInt("id"); 27 String name = rs.getString("name"); 28 System.out.println("id:" + id + " name:" + name); 29 } 30 31 rs.close(); 32 stmt.close();*/ 33 34 /*} catch (SQLException e) { 35 // 例外処理 36 e.printStackTrace(); 37 } finally { 38 try { 39 if (conn != null) { 40 conn.close(); 41 } 42 } catch (SQLException e) { 43 // 例外処理 44 } 45 }*/ 46 47 getConnection(); 48 49 } 50 51 public static Connection getConnection(){ 52 Connection con = null; // 初期化 53 try{ 54 Class.forName("com.mysql.jdbc.Driver"); 55 con = DriverManager.getConnection("jdbc:mysql://localhost:3306/test_db","root","root"); 56 System.out.println("DB接続成功!!!"); 57 return con; 58 }catch(ClassNotFoundException e){ 59 throw new IllegalMonitorStateException(); // クラスがなかった時の例外処理 60 } catch (SQLException e) { 61 throw new IllegalMonitorStateException(); // SQLでエラーが起きた時の例外処理 62 } 63 } 64}

試したこと

調べていると、「eclipse上のjavaファイルの実行環境が統一されていない」もしくは、「java8以上でないと実行できない」というような指摘が多かったので、javaのバージョンを変えたり、eclipse上のビルドパスや実行構成でJREシステムライブラリーのバージョンを変えたりと、色々と試しました。

補足情報(FW/ツールのバージョンなど)

実行できないのは学校での環境下のみであって、自宅のPCでは問題なく接続し、データベースから値の取得と表示はできています。
学校環境: Tomcat 5.5 (Java 1.6)、mySQL 最新、mysql-connector(jarファイル) 最新
自宅環境: Tomcat 9.0 (Java 10)、mySQL 最新、mysql-connector(jarファイル) 最新

自宅環境下で、学校でのエラーの原因を突き止めるため、eclipseのプロジェクトの実行構成からプロジェクト実行環境をjava6に変えたところ、上記エラーが出ました。(当たり前ですが・・・)
その後、ビルドパスの方のJREシステムライブラリのバージョンもjava6に変えました。
それでもやはり上記エラーが出るので、根本的な原因は何なのか突き止められず困っています。
他にバージョンの設定などをする項目があったりしますか?

それともやはり、javaのバージョンが8以上でないと、mySQLとの接続はできないのでしょうか?
(さすがにそんなことはないと思っているのですが・・・)
学校側に用意された環境なので、できればこのままの環境でなんとかmySQLと接続したいのですが、思い当たる節がありましたら教えていただきたいです。m(_ _)m

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

それともやはり、javaのバージョンが8以上でないと、mySQLとの接続はできないのでしょうか?

(さすがにそんなことはないと思っているのですが・・・)

そんな事があるからこのエラーなんですよ。

Exception in thread "main" java.lang.UnsupportedClassVersionError: com/mysql/jdbc/Driver : Unsupported major.minor version 52.0

Javaは古かったり問題があるAPIは廃止したり、使用を非推奨にすることがあります。
古いMySQL Connector/JとJDKで動いていたものが、MySQL Connector/Jだけ今主流のJDKに合わせたものを使っても動かない可能性はあるのです。

さらにJavaはメジャーバージョン8⇒9の時に、当時Oracle一強だったJDKが
JDKサポート有償化の流れを受けて、有償でOracleJDKを使うか
OSSであるOpenJDK(これも管理ベンダー毎に派生がある)を使うか何て事があり
余計に互換性には気を使う必要が出てきました。

一度、ご利用のMySQL Connector/JとJDKバージョン、Tomcatバージョンのマトリクスを考えて
どのバージョンがどの対応をするのかを確認するのが良いかと思います。

追記

これが参考になりそうですね。私の方で検証はしていませんが内容を確認する価値がありそうに思います。
英語の部分はGoogle翻訳等を駆使してください。

3.2 Connector/J Versions, and the MySQL and Java Versions They Require
https://dev.mysql.com/doc/connectors/en/connector-j-versions.html

投稿2021/02/14 04:56

編集2021/02/15 06:26
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

s1123

2021/02/14 05:07

ご回答ありがとうございます。 では、MySQL Connector/Jのバージョン自体を下げれば、動く可能性はありますでしょうか? 何度か下げてみたりもしたのですが動かず、もの凄く沢山のバージョンがあるので、どのバージョンが互換性があるのか分からず、調べても情報もなく、途方に暮れていました…。 もしご存知でしたら教えていただきたいです。
退会済みユーザー

退会済みユーザー

2021/02/14 06:03 編集

>MySQL Connector/Jのバージョン自体を下げれば、動く可能性はありますでしょうか? 動作する可能性はあります。しかし各プロダクトでそれぞれのバージョン整合を取る必要があるので、いちいち覚えていませんというのが本音です。 JDK、Tomcat、MySQL Connector/J、MySQL DataBase 例えば各10個ずつのバージョンが存在したら最大で10^5=100,000通りです。 本当にやりますか?という話。 > 学校環境: Tomcat 5.5 (Java 1.6)、mySQL 最新、mysql-connector(jarファイル) 最新 結局のところこれが一番のガンだとは思います。 当時の古いMySQLとConnector/Jが用意できないなら、素直にJDKとTomcatのバージョンを上げるべきだと思います。 これ何年前の環境だろう。10年くらい経つ?! とりあえず、使用しているJDKのリリース日とConnector/Jのバージョンをリリース日辺りを頼りにあたりを付けて検証するか、そういう先人を運よく探し当てるかするしかないでしょう。 以上です。
s1123

2021/02/15 22:22

返信、追記ありがとうございます! 昨日もう一度eclipseのJavaバージョンの設定を色々といじって全て統一し、 貼って下さったURLページを参考に、めぼしそうなjarファイルをダウンロードして導入してみたところ、mySQLに接続することができました! 正直言って、何が解決に繋がったのかははっきり分からないのですが…(笑) でも無事解決できたので、よかったです! ありがとうございましたm(_ _ )m
退会済みユーザー

退会済みユーザー

2021/02/16 12:01 編集

> 昨日もう一度eclipseのJavaバージョンの設定を色々といじって全て統一し、 貼って下さったURLページを参考に、めぼしそうなjarファイルをダウンロードして導入してみた 実際に行ったこれらの作業記録(JDKはこのファイル、Connector/Jはこのファイル等)を残さないとこの質問は、s1123さんが解決してよかったねで終わってしまいます。 teratailは同じ問題に当たった人に役立つナレッジの側面があるので、できれば具体的に行った作業を残してください。 失礼します。
s1123

2021/02/21 08:21 編集

お返事遅れましてすみません。 覚えている部分のみなので、漏れはあるかもしれませんが… ・プロジェクト右クリック>ビルドパス構成>ライブラリー>JREシステム・ライブラリーとApache TomcatのJavaバージョン ・環境設定>Java>インストール済みのJREのJavaバージョン ・環境設定>Java>コンパイラー>コンパイラー準拠レベルのJavaバージョン ・実行構成>Apache Tomcat>ローカルホストのTomcatのJavaバージョン ・実行構成>Javaアプリケーション>〇〇(実行したいクラス名)>JRE>プロジェクトJREのJavaバージョン 上記の設定のJavaバージョンを全て同一バージョン(私の場合1.6)に統一しました。 その後、mahnyさんが貼って下さったurlを参照したところ、MySQL Connector/Jには大きく分けて2種類のバージョン(8.0と5.1)があることが分かったので、私の環境下のJavaバージョンに互換性がありそうな、5.1をダウンロードすることにしました。(実際にダウンロードしたのは5.1代の最新の5.1.49です。) その後、無事に接続できたですが、eclipseの設定をいじったからなのか、MySQL Connector/Jのバージョンを変えたからなのかは定かではないです。 (個人的に、eclipseの方かな…とは思っています)
退会済みユーザー

退会済みユーザー

2021/02/21 08:52

情報の追加ありがとうございます。 原因としては両方でしょうかね。 プログラムを作っている最中はEclipseの設定。いわゆるJDKバージョンによるコンパイルエラーやAPIの使用可否に関する部分。 プログラムが動いた後は、実際にコンパイル済みJavaクラス(.class)とライブラリ(.jar)とMySQLサーバ本体が関連し、この状態まで来るとEclipseは基本的に無関係です。 大元のエラー。実際に私が現地で環境を見ている訳ではないので予測になりますが… 【Exception in thread "main" java.lang.UnsupportedClassVersionError: com/mysql/jdbc/Driver : Unsupported major.minor version 52.0】 これは、おそらく実際に動かしたらバージョン違いだったという話なので、後者。つまり開発環境であるEclipseではなく、実行環境が要因だったのだろうと予想します。 では失礼します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問