【Java】Docker上でMySQLを操作する
現在、Docker上でJavaを用いて簡単なMySQLを操作するテストプログラムを作成しています。
.NET(C#, F#)やGoの経験はありますが、javaに関しては全く分からない状態です。
つまずいた点
「ドライバ」が使えない。
https://dev.mysql.com/downloads/connector/j/から入手した「Platform Independent」ドライバを使用しています。
DockerではDebianを使用していますが、多くのサイトで「Platform Independent」を使用しているため、さらにはそれ以外のプラットフォームを使用することも想定して「Platform Independent」としています。
※ 一応Debianでも試しましたが、同様のエラーとなりました。
エラー
クラスパスを指定しないと「java.lang.ClassNotFoundException: com.mysql.jdbc.Driver」エラー。
コンパイル時指定した場合、同様に「java.lang.ClassNotFoundException: com.mysql.jdbc.Driver」エラー。
実行時指定した場合、「Could not find or load main class Main」エラー。
ソース
Dockerfile
1FROM openjdk:11-slim 2 3# ダウンロードしたドライバなどをコンテナ内にコピー 4# -> ドライバは「/app/javalib/mysql-connector-j-8.0.31.jar」へ 5 6RUN javac -classpath /app/javalib/mysql-connector-j-8.0.31.jar Main.java 7CMD ["java", "Main"]
java
1import java.sql.Connection; 2import java.sql.DriverManager; 3import java.sql.PreparedStatement; 4import java.sql.ResultSet; 5import java.sql.SQLException; 6 7public class Main { 8 public static void main(String[] args) { 9 10 try { 11 // データベースに接続 12 Class.forName("com.mysql.jdbc.Driver"); // ★クラスパスを指定しないとここでエラー★ -> java.lang.ClassNotFoundException: com.mysql.jdbc.Driver 13 Connection con = DriverManager.getConnection( 14 "jdbc:mysql://db/sample_db?useSSL=false", 15 "root", 16 "root" 17 ); 18 // ...
bash
1# コンパイル時指定 2javac -classpath /app/javalib/mysql-connector-j-8.0.31.jar Main.java 3java Main 4# -> java.lang.ClassNotFoundException: com.mysql.jdbc.Driver 5 6# 実行時指定 7javac Main.java 8java -classpath /app/javalib/mysql-connector-j-8.0.31.jar Main 9# -> Error: Could not find or load main class Main
試したこと
https://ja.stackoverflow.com/questions/4988の記事を参考に、問題解決を試みましたが、解決しませんでした。
上記で説明した処理が、スタックオーバーフローの内容の通りになっているはずです。
クラスパスの指定が間違えていることも考えて、イロイロ調べましたが、特に問題なさそうでした。
おそらく(9割以上の確率で)、クラスパスの指定の不備が原因だと思いますが、正しく設定している気がしていて、原因がわかりません。
ご協力をお願いします。
回答1件
あなたの回答
tips
プレビュー