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

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

新規登録して質問してみよう
ただいま回答率
85.37%
Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

MySQL

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

JDBC

JDBC(Java DataBase Connectivity)は、Javaとリーレーショナルデータベースに接続させる基本的なAPIです。Java上でSQLステートメントを発行することで、データベースの種類に影響を受ないDB操作を可能とします。

Java

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

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Q&A

解決済

1回答

678閲覧

(Java+JDBC) Linuxで正常にビルド・稼働できたプログラムが、Windowsでは「エラー: メイン・クラス xxxが見つからなかったかロードできませんでした」が発生する。

tamahimesama_xz

総合スコア31

Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

MySQL

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

JDBC

JDBC(Java DataBase Connectivity)は、Javaとリーレーショナルデータベースに接続させる基本的なAPIです。Java上でSQLステートメントを発行することで、データベースの種類に影響を受ないDB操作を可能とします。

Java

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

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

0グッド

0クリップ

投稿2024/08/20 14:17

実現したいこと

(1)Linux(CentOS)で、動作実績のあるJavaプログラムソースをWindowsでコンパイルと実行する。
(2)JDBC(MySQL Connector/J 9.0)を使用してMySQLにつなぎ、ストアドプロシージャを起動する。

※ 都合上、EclipseやVSCodeによるビルド環境ではなく、手動でコンパイルと実行するという環境です。

//ソース構成 C:\/hoge ├ Test01.class ├ Test01.java └ mysql-connector-j-9.0.0.jar

発生している問題・分からないこと

Linuxで起動したときとほぼ同じ要領で、Windowsでコンパイルと起動を試しました。

//① まずコンパイルは通ります。「Test01.class」も生成されました。 PS C:\hoge> javac -encoding utf-8 -classpath .\mysql-connector-j-9.0.0.jar .\Test01.java

ところが、いざ「java」コマンドで実行すると、mysql-connector-j-9.0.0.jar以外の外部パッケージは使用せず、ソースも小規模かつ簡素でありながら、「エラー: メイン・クラスTest01が見つからなかったかロードできませんでした」というエラーが発生します。

エラーメッセージ

error

1//② 今回の問題発生。 2PS C:\hoge> java -classpath .\mysql-connector-j-9.0.0.jar: Test01 3エラー: メイン・クラスTest01が見つからなかったかロードできませんでした 4

該当のソースコード

Java

1//小規模ソースなので、パッケージ定義は無しです。 2 3import java.sql.Connection; 4import java.sql.DriverManager; 5import java.sql.SQLException; 6import java.sql.Statement; 7import java.sql.CallableStatement; 8 9public class Test01 { 10 public static void main(String[] args) { 11 try { 12 13/******【中略】MySQL に接続、ストアドプロシージャを起動 ******/ 14 15 } catch (SQLException | ClassNotFoundException e) { 16 e.printStackTrace(); 17 } 18 } 19} 20

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

★Googleなどで調べてどう考えたか?

エラーメッセージをそのまま検索しました。
同じような原因パターンとして、
・パッケージ名が指定されていない
・フォルダ構成を入れ替える
という対処法がほとんどでした。


★Windows側のJavaについて。

Windows版 OpenJDK 8で、インストーラー版ではなくZIPファイルから解凍し、
PATHは、「C:\{ZIPファイルから解凍したフォルダ}\bin」を設定しました。
この状態で、「java -version, javac -version」を叩くと正常にPATHが通ることを確認しました。
CLASSPATHは設定していませんでした。


★Windows環境で、ほかのプログラムでも同じ現象が発生するか?

「HELLO WORLD」のごく単純なプログラムの場合は、全く問題なくコンパイル&実行が出来ました。

// このコマンドでは正常にコンパイルと実行ができた javac -encoding utf-8 .\HelloWorld.java java HelloWorld

補足

【今回の環境】
Linux-OS = CentOS 8
Windows = Windows 10 Pro 64bit 22H2
Java(Linux側) = OpenJDK 1.8
Java(Windows側)= OpenJDK 1.8
JDBCドライバ = MySQL Connector/J 9.0

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

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

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

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

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

guest

回答1

0

ベストアンサー

  • -classpath オプション無しで java コマンド実行した場合は、クラスパスはデフォルトでカレントディレクトリを指し、そこを起点としてクラスを検索します。
    HelloWorld.class が見つかる
  • -classpath オプションで単一のjarファイルを指定して java コマンド実行した場合は、そのjarファイル内のみを対象にクラスを検索します。
    Test01.class が見つからない
  • windows環境で複数のクラスパスを指定する際の区切り文字はセミコロン ; です。
    ただしpoweshellはセミコロンをコマンドの区切りとして解釈するので全体を括る必要があります

以上よりクラスパスはこんな感じになると思います
-classpath ".;.\mysql-connector-j-9.0.0.jar"

参考 https://docs.oracle.com/javase/jp/8/docs/technotes/tools/windows/classpath.html

投稿2024/08/20 15:34

pecmm

総合スコア647

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

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

tamahimesama_xz

2024/08/21 01:21

アドバイスのおかげで解決できました。本当にありがとうございました。 Oracleの公式ドキュメントリンクのご提供もありがとうございます。 ↓↓これでイケました。 ``` javac -encoding utf-8 -classpath ".;.\mysql-connector-j-9.0.0.jar" test01.java java -classpath ".;.\mysql-connector-j-9.0.0.jar" test01 ```
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問