turumi4551
@turumi4551 (tatsuya tsurumi)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

java JDBCを使いデータの呼び出しがしたいです

解決したいこと

java初心者で初質問になります。
JDBCを使いデータの呼び出しをしたいのですが、エラーが解決できません。

発生している問題・エラー

エラー: メイン・クラスDBAccessのロード中にLinkageErrorが発生しました
	java.lang.UnsupportedClassVersionError: DBAccess has been compiled by a more recent version of the Java Runtime (class file version 61.0), this version of the Java Runtime only recognizes class file versions up to 55.0

該当するソースコード

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

/**
 * ■ データベースに接続するプログラム
 *
 * カリキュラム「3-5-1.JDBCドライバ」を参考に
 * JDBCドライブのjarファイルの設置とビルドパスの追加も忘れないようにしましょう。
 *
 * 問①〜問④までを回答し、データベースと接続してみましょう。
 * カリキュラム「3-5-2.データベースを扱うための準備」を参考にしてください。
 *
 */

public class DBAccess {

    /** ドライバーのクラス名 */
    private static final String POSTGRES_DRIVER = "org.postgresql.Driver";
    /** ・JDMC接続先情報 */
    // 問① データベースのホスト名・データベース名を定数にしなさい。
    private static final String JDBC_CONNECTION = "jdbc:postgresql://localhost:5432/lesson_db";
    /** ・ユーザー名 */
    // 問② データベースのユーザー名を定数にしなさい。
    private static final String USER = "postgres";
    /** ・パスワード */
    // 問③ データベースのパスワードを定数にしなさい。
    private static final String PASS = "postgres";

    public static void main(String[] args) {

        Connection connection = null;
        Statement statement = null;
        ResultSet resultSet = null;

        try {
            Class.forName(POSTGRES_DRIVER);
            // 問④ 問①〜③の定数を使ってデータベースと接続しなさい。
            connection = DriverManager.getConnection(
            		JDBC_CONNECTION,USER,PASS );
            statement = connection.createStatement();

            String SQL = "SELECT * FROM TB_SHOHIN";
            resultSet = statement.executeQuery(SQL);

            while (resultSet.next()) {
                String column1 = resultSet.getString("SHOHIN_ID");
                String column2 = resultSet.getString("SHOHIN_NAME");
                int column3 = resultSet.getInt("TANKA");

                System.out.print(column1 + ",");
                System.out.print(column2 + ",");
                System.out.println(column3);
            }

            // forName()で例外発生
        } catch (ClassNotFoundException e) {
            e.printStackTrace();

            // getConnection()、createStatement()、executeQuery()で例外発生
        } catch (SQLException e) {
            e.printStackTrace();

        } finally {
            try {
                if (resultSet != null) {
                    resultSet.close();
                }
                if (statement != null) {
                    statement.close();
                }
                if (connection != null) {
                    connection.close();
                }

            } catch (SQLException e) {
                e.printStackTrace();

            }
        }
    }
}

MacBook-Air ~ % /usr/libexec/java_home -V
Matching Java Virtual Machines (2):
11.0.15.1 (x86_64) "Oracle Corporation" - "Java SE 11.0.15.1" /Library/Java/JavaVirtualMachines/jdk-11.0.15.1.jdk/Contents/Home
1.8.333.02 (x86_64) "Oracle Corporation" - "Java" /Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home
/Library/Java/JavaVirtualMachines/jdk-11.0.15.1.jdk/Contents/Home

image.png

自分で試したこと

実行しようとしているバージョンが合っていないため発生してるエラーであると認識しています。
javaのアンインストールとインストールを実行し最新のものにしました。
jarを最新のものから古いものまで試しました。
どちらを変えてもうまくいきませんでした。初歩的な問題かもしれませんが解決方法を教えていただきたいです。

0

1Answer

DBAccessはJava17によってコンパイルされているためエラーが発生しているようです。
開発環境のコンパイル設定を見直し、コンパイルを再度行えば改善する可能性があります。

Javaバージョン

0Like

Comments

  1. @turumi4551

    Questioner

    ご回答ありがとうございます。
    よくわかっておらず大変恐縮ですが現状を見たところEclipsの環境で2021をダウンロードしていたようです。改めてダウンロードページを見た所「 Eclipse 実行用 JDK 17」と記載がありました。そこで2020版を見ると「Eclipse 実行用 JDK 11」と記載されているので、こちらをダウンロードし直すと改善しますでしょうか?
    初歩的な質問で申し訳ありません。
  2. ダウンロードしていただいたEclipseは問題はなさそうです。

    コンパイラー設定とJREシステム・ライブラリのバージョンが一致していない可能性があるため、コンパイラー設定を変更すれば改善するかと思います。

    - 設定方法
    1. メニューの[ウィンドウ(W)]->[設定(P)]を選択し、左ペインの[Java]->[コンパイラー]を開きます。
    2. コンパイラー準拠レベルを確認して17に設定されている場合は11にバージョンを変更して適応を押下します。


  3. @turumi4551

    Questioner

    ありがとうございます。
    設定変更し解決しました。
    かなりの時間悩んでいたので大変助かりました。

Your answer might help someone💌