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

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

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

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

JDBC

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

Java

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

Eclipse

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

Q&A

1回答

3957閲覧

EclipseでJDBCドライバの読み込み(JAVA)

printaisa

総合スコア0

MySQL

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

JDBC

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

Java

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

Eclipse

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

0グッド

0クリップ

投稿2021/09/02 07:42

編集2021/09/03 11:59

前提・実現したいこと

EclipseでJavaの簡易アプリを作っており、「ログイン機能の実装」をするにあたりJDBCドライバの読み込みエラーが発生し、困っています。
これを解消し、テーブル内に登録されたid,passでログインすることを目標としています。

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

java.lang.NoClassDefFoundError: java/sql/Driver java.base/java.lang.ClassLoader.findBootstrapClass(Native Method) java.base/java.lang.ClassLoader.findBootstrapClassOrNull(ClassLoader.java:1258) java.base/java.lang.System$2.findBootstrapClassOrNull(System.java:2134) java.base/jdk.internal.loader.ClassLoaders$BootClassLoader.loadClassOrNull(ClassLoaders.java:118) java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:616) java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:579) java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522) org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1284) org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1187) java.base/java.lang.Class.forName0(Native Method) java.base/java.lang.Class.forName(Class.java:315) dao.IdpwDAO.isLoginOK(IdpwDAO.java:22) servlet.LoginServlet.doPost(LoginServlet.java:43) javax.servlet.http.HttpServlet.service(HttpServlet.java:652) javax.servlet.http.HttpServlet.service(HttpServlet.java:733) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)

該当のソースコード

Java

1package dao; 2 3import java.sql.Connection; 4import java.sql.DriverManager; 5import java.sql.PreparedStatement; 6import java.sql.ResultSet; 7import java.sql.SQLException; 8 9public class IdpwDAO { 10 // ログインできるならtrueを返す 11 public boolean isLoginOK(String id, String pw) { 12 Connection conn = null; 13 boolean loginResult = false; 14 String servername = "localhost"; 15 String databasename = "Sample_db"; 16 String user = "root"; 17 String password = "********"; 18 String url = "jdbc:mysql://" + servername + "/" + databasename + "?serverTimezone=JST"; 19 20 try { 21 // JDBCドライバを読み込む 22 Class.forName("com.mysql.cj.jdbc.Driver"); 23 24 // データベースに接続する 25 conn = DriverManager.getConnection(url, user, password); 26 27 // SELECT文を準備する 28 String sql = "select count(*) from IDPW where ID = ? and PW = ?"; 29 PreparedStatement pStmt = conn.prepareStatement(sql); 30 pStmt.setString(1, id); 31 pStmt.setString(2, pw); 32 33 // SELECT文を実行し、結果表を取得する 34 ResultSet rs = pStmt.executeQuery(); 35 36 // ユーザーIDとパスワードが一致するユーザーがいたかどうかをチェックする 37 rs.next(); 38 if (rs.getInt("count(*)") == 1) { 39 loginResult = true; 40 } 41 } 42 catch (SQLException e) { 43 e.printStackTrace(); 44 loginResult = false; 45 } 46 catch (ClassNotFoundException e) { 47 e.printStackTrace(); 48 loginResult = false; 49 } 50 finally { 51 // データベースを切断 52 if (conn != null) { 53 try { 54 conn.close(); 55 } 56 catch (SQLException e) { 57 e.printStackTrace(); 58 loginResult = false; 59 } 60 } 61 } 62 63 // 結果を返す 64 return loginResult; 65 } 66} 67

試したこと

javaのビルドパスでクラスパスの方にmysql-connector-java-8.0.25.jarを通しています。
上記のコードは別にあるservletファイルで実行するメソッドIdpwDAO用のファイルです。
そのため実行時にはサーバーで実行を押していますが、これとは別にDBにアクセスし内容を表示するコードを書き、javaアプリケーションで実行するとDBの中身が表示されるので、なぜサーバーを介すとできないのかな?と悩んでおります。
pleiadesの最新(2021-06)をインストールすると、サーバー起動の所でエラーになりました。
調べると最新バージョンはバグがでやすくおすすめしないとのことだったので、諦めました。
回答よろしくお願いいたします。

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

pleiades-2021-03
tomcat9
java11
データベースはmysqlを使用しており、DBViewerにて登録内容など正常であることを確認済みです。
tomcat9のフォルダのlib直下にmysql-connector-java-8.0.25.jarを配置しています。
プロジェクトの種類:動的Webプロジェクト
構成
イメージ説明
[環境変数]
JAVA_HOME:C:\Users***\Downloads\pleiades-2021-03-java-win-64bit-jre_20210328\pleiades\java\11
Path(システム):%JAVA_HOME%\bin
Path(ユーザー):C:\Program Files\MySQL\MySQL Server 8.0\bin

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

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

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

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

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

jimbe

2021/09/02 08:16

tomcat のほうはドライバは入っているのでしょうか。
printaisa

2021/09/02 08:39

tomcat9のフォルダのlib直下にmysql-connector-java-8.0.25を置いてますが、あってますでしょうか?
YT0014

2021/09/02 12:44

MySQLのバージョンをご提示ください。
YT0014

2021/09/02 13:13

この欄は、質問への追記・修正の依頼を行う場所です。 質問文を修正して、両回答の記述を追加してください。
printaisa

2021/09/02 13:28

ありがとうございます。質問を編集しました。
xebme

2021/09/02 14:43

>tomcat9のフォルダのlib直下にmysql-connector-java-8.0.25 mysql-connector-java-8.0.25.jar ですが、まさか、mysql-connector-java-8.0.25がディレクトリということはないですね。
xebme

2021/09/02 14:49

原因究明とは別に、tomcatの起動javaコマンドのクラスパスに直接jarファイルを指定するとたぶんロードできます。java ... -cp ... $CATALINA_BASE/lib/mysql-connector-java-8.0.25.jar
printaisa

2021/09/03 02:59

ありがとうございます! mysql-connector-java-8.0.25.jarはtomcat9のフォルダのlib直下に配置する必要はないという意味でしょうか? また、クラスパスにはjarファイルを指定しております。
shinami

2021/09/03 04:55

このプロジェクトは、Eclipseで動的Webプロジェクトとして作成していますか? WebContent/WEB-INF/libフォルダはありますか?
printaisa

2021/09/03 12:01

コメントありがとうございます。動的Webプロジェクトで作成しています。 また、バージョンの関係かwebapp/WEB-INF/libフォルダでしたらあります。
YT0014

2021/09/03 13:11

読込めていないのは、java.sql.Driverなので、java.sql.Driverの変数などを宣言するコードを書いてみてください。
printaisa

2021/09/07 05:30

pleiadesごと新しくしたらできました!考えてくださり、ありがとうございました。
guest

回答1

0

eclipseを新しいバージョンにし、1から設定し直しました。
根本的な原因追求には至らなかったのですが、JDBCドライバの読み込みまでうまくいきました。

ただ、前のプロジェクトではビルドパスの所でクラスパスにmysqlのjarを通していたのですが、新しいプロジェクトでは通さずともmysqlを使いDBを操作することができました。

ここらへんの知識が曖昧なので、調べて深めていきたいと思います。
考えてくださった方、ありがとうございました!

投稿2021/09/07 06:23

printaisa

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問