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

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

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

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

JAR

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

JDBC

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

Java

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

Eclipse

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

Q&A

解決済

3回答

10035閲覧

eclipseでjarファイルがあってもJava.lang.ClassNotFoundException:mysql.jdbc.Driverのエラーがでる

yosi_

総合スコア6

MySQL

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

JAR

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

JDBC

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

Java

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

Eclipse

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

0グッド

1クリップ

投稿2019/08/30 15:08

java初心者のものです。書籍の内容どおりに進めてたらエラーにひっかりまして、
「Java.lang.ClassNotFoundException:mysql.jdbc.Driver」で調べたところjarファイルが設定していないとでたので、確認したところちゃんとWEB-INF、libにjarファイルを設定していますし、クラスパスも「ビルドパスの構成」から設定しているのにエラーになる原因がわかりません。

コンソールのエラー

java.sql.SQLException: con.mysql.jdbc.Driver at org.apache.catalina.realm.JDBCRealm.open(JDBCRealm.java:645) at org.apache.catalina.realm.JDBCRealm.startInternal(JDBCRealm.java:718) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) at org.apache.catalina.realm.CombinedRealm.startInternal(CombinedRealm.java:214) at org.apache.catalina.realm.LockOutRealm.startInternal(LockOutRealm.java:120) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:905) at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:262) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) at org.apache.catalina.core.StandardService.startInternal(StandardService.java:439) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:760) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) at org.apache.catalina.startup.Catalina.start(Catalina.java:625) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:351) at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:485) Caused by: java.lang.ClassNotFoundException: con.mysql.jdbc.Driver at java.net.URLClassLoader.findClass(URLClassLoader.java:382) at java.lang.ClassLoader.loadClass(ClassLoader.java:424) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:264) at org.apache.catalina.realm.JDBCRealm.open(JDBCRealm.java:641) ... 19 more

ソースコード

package chapter10; import java.io.IOException; import java.util.UUID; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; /** * Servlet implementation class TransactionTokenServlet */ @WebServlet("/TransactionTokenServlet1") public class TransactionTokenServlet1 extends HttpServlet { TransactionTokenBean tranTokenBean=new TransactionTokenBean(); @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { int studentNo; String studentName; int schoolYear; try{ studentNo=Integer.parseInt(request.getParameter("studentno")); studentName=request.getParameter("studentname"); schoolYear=Integer.parseInt(request.getParameter("schoolyear")); }catch(NumberFormatException e){ getServletContext().getRequestDispatcher("/errorinput.html").forward(request, response); return; } tranTokenBean.setStudentNo(studentNo); tranTokenBean.setStudentName(studentName); tranTokenBean.setSchoolYear(schoolYear); HttpSession session=request.getSession(); session.setAttribute("tranTokenBean", tranTokenBean); String tokenID=UUID.randomUUID().toString(); session.setAttribute("tokenID", tokenID); getServletContext().getRequestDispatcher("/transanctiontoken_check.jsp").forward(request,response); } }

試したこと

ここに問題に対して試したことを記載してください。

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

Eclipse4.5
Widows7
tomcat8
jdbcドライバー:mysql-connection-java-8.0.17.jar
jdk1.8.0_211
MySQL Server5.7

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

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

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

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

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

guest

回答3

0

java.sql.DriverManager

かなりの人がなぜ12年前の技術で書くんだい?

DriverManagerメソッドgetConnectionとgetDriversは、Java Standard Edition サービス・プロバイダ・メカニズムをサポートするように拡張されました。JDBC 4.0ドライバは、ファイルMETA-INF/services/java.sql.Driverを含める必要があります。このファイルには、java.sql.DriverのJDBCドライバ実装の名前が含まれます。たとえばmy.sql.Driverクラスをロードするために、META-INF/services/java.sql.Driverファイルに次のエントリが含まれます。

書かないでいいものを書くからそういうバグになるんだけど

投稿2019/09/03 11:59

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

xebme

2019/09/03 12:55

本題は、$CATALINA_HOME/conf/server.xmlに記述するrealm要素にドライバー名を記述する。ドライバー名を正しくしてほしい、ということです。
xebme

2019/09/03 13:00

JDBC 4.0は、javaアプリケーションで機能しますが、webアプリケーションの場合に有効にならないので、仕方なくClass.forName()している。これがメモリリークする可能性をもたらす。これは別の話です。いつか詳しく説明します。
退会済みユーザー

退会済みユーザー

2019/09/03 13:01

ああすまん、1つめの回答で引きずられた
guest

0

JDBC RealmおよびDataSource Realmは、データベースで認証用のユーザ情報を管理する方法です。

ドライバー名はsever.xmlに記述することになっています。書籍にeclipseで開発する際の設定方法が書いてあるはず。ドライバー名を正しくしてください。

ドライバー用のjarはWEB-INF/lib配下ではなく、$CATALINA_HOME/lib配下に置くことをすすめます。ドライバーが原因でメモリーリークする可能性があるため。

Tomcat 8 JDBCRealm 追記 (2019-9-4)

Tomcat 8 のJDBCRealmを参照してください。JDBCRealm

$CATALINA_BASE/conf/server.xml に記述する内容です。

code

1<Realm className="org.apache.catalina.realm.JDBCRealm" 2 driverName="org.gjt.mm.mysql.Driver" 3 connectionURL="jdbc:mysql://localhost/authority?user=dbuser&amp;password=dbpass" 4 userTable="users" userNameCol="user_name" userCredCol="user_pass" 5 userRoleTable="user_roles" roleNameCol="role_name"/>

ご自分の設定の driverName の部分が間違っていると思われます。修正しましょう。

また、JDBCドライバーは $CATALINA_HOME/lib 配下に置くように言っています。jarファイルでなければならない。zipファイルはだめのよう。

code

1To set up Tomcat to use JDBCRealm, you will need to follow these steps: 2 3 <省略> 4 Place a copy of the JDBC driver you will be using inside the $CATALINA_HOME/lib directory. Note that only JAR files are recognized! 5 <省略> 6

上はTomcat単独の設定です。eclipseでTomcatを起動しているなら、プロジェクトビューの中の Serverフォルダの下にserver.xmlがあるはず。その中身を調べて、ドライバー名を正しくしてください。

code

1driverName="com.mysql.jdbc.Driver"

質問があれば歓迎します。server.xmlの場所を見つけてください。

投稿2019/09/03 11:05

編集2019/09/04 08:30
xebme

総合スコア1081

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

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

0

ベストアンサー

問題を含んでいるのはそのソースではなさそうです(chapter10 はエラーログのどこにも出ていない)。

エラー文の主要な行は以下の二つで、

java.sql.SQLException: con.mysql.jdbc.Driver

Caused by: java.lang.ClassNotFoundException: con.mysql.jdbc.Driver

con.mysql.jdbc.Driver というクラスが見つかりませんと述べています。

java の Class.forName("com.mysql.jdbc.Driver"); とするべきところ、mn となってしまったのだと思います。

ソースコードに心当たりがなければ、設定ファイルなどに記載したものが最終的に上記のコードにわたっているのかもしれません。

con.mysql.jdbc.Driver を全文検索するなどして原因箇所を発見し、com.mysql.jdbc.Driverに修正してください。

投稿2019/08/30 16:51

R.Mizukami

総合スコア1086

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

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

退会済みユーザー

退会済みユーザー

2019/09/03 11:52

なんでみんな 12年以上前に書かなくてもよくなった Class.forName をかくかね
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問