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

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

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

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

JDBC

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

Java

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

Q&A

2回答

1547閲覧

MySQLへ接続したいのですがJDBCでNoClassDefFoundErrorと出てしまいます

退会済みユーザー

退会済みユーザー

総合スコア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で作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2021/07/25 08:27

編集2021/07/25 09:34

MySQLへ接続したいのですがJDBCでNoClassDefFoundErrorと出てしまいます。
USBへコピーし学校のPCでやってみたところできたのでコードのミスではなく環境設定に問題があると思うのですが何が間違っているのかよく分かりません。
NoClassDefFoundErrorなのでjarファイルのクラスパスが間違っていると思ったのですが間違っていないようです。
jarファイルはsrc/main/webapp/WEB-INF/libの中に入れてビルドパスへ追加しています。
対処法がわかる方いましたら教えてください

Controller.java(ここから実行します)

java

1package kenservlet; 2 3import java.io.IOException; 4import java.sql.SQLException; 5 6import javax.servlet.RequestDispatcher; 7import javax.servlet.ServletContext; 8import javax.servlet.ServletException; 9import javax.servlet.annotation.WebServlet; 10import javax.servlet.http.HttpServlet; 11import javax.servlet.http.HttpServletRequest; 12import javax.servlet.http.HttpServletResponse; 13 14import kenservice.IdSearch; 15 16/** 17 * Servlet implementation class Controller 18 */ 19@WebServlet("/controller") 20public class Controller extends HttpServlet { 21 private static final long serialVersionUID = 1L; 22 23 /** 24 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) 25 */ 26 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 27 request.setAttribute("message", "検索条件を入力してください"); 28 29 ServletContext context = getServletContext(); 30 RequestDispatcher rd = context.getRequestDispatcher("/disp.jsp"); 31 rd.forward(request, response); 32 } 33 34 /** 35 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) 36 */ 37 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 38 request.setCharacterEncoding("UTF-8"); 39 String searchBtn = request.getParameter("btn"); 40 String jsp; 41 try { 42 //ID検索 43 if(searchBtn != null && searchBtn.equals("IdSearch")) { 44 IdSearch ids = new IdSearch(); 45 ids.execute(request); 46 jsp = "/disp.jsp"; 47 }else { 48 request.setAttribute("errorMessage", "不正アクセスです"); 49 jsp = "/error.jsp"; 50 } 51 }catch(NumberFormatException e) { 52 e.printStackTrace(); 53 request.setAttribute("errorMessage", "数値を入力してください"); 54 jsp = "/error.jsp"; 55 }catch(SQLException e) { 56 e.printStackTrace(); 57 request.setAttribute("errorMessage", "JDBCのエラーです"); 58 jsp = "/error.jsp"; 59 }catch(Exception e) { 60 e.printStackTrace(); 61 request.setAttribute("errorMessage", "エラーが発生しました"); 62 jsp = "/error.jsp"; 63 } 64 65 ServletContext context = getServletContext(); 66 RequestDispatcher rd = context.getRequestDispatcher(jsp); 67 rd.forward(request, response); 68 } 69 70} 71

EmpDao.java

java

1package kendao; 2 3import java.sql.Connection; 4import java.sql.DriverManager; 5import java.sql.PreparedStatement; 6import java.sql.ResultSet; 7import java.sql.SQLException; 8 9import kenmodel.EmpBean; 10 11public class EmpDao { 12 private Connection connection; 13 14 //接続 15 public EmpDao() throws SQLException, ClassNotFoundException{ 16 Class.forName("com.mysql.jdbc.Driver"); 17 String url = "jdbc:mysql://localhost:3306/java_web_system"; 18 String user = "root"; 19 String password = ""; 20 connection = DriverManager.getConnection(url, user, password); 21 } 22 23 //切断 24 public void close() { 25 try { 26 if(connection != null) { 27 connection.close(); 28 } 29 }catch(SQLException e) { 30 e.printStackTrace(); 31 } 32 } 33 34 //引数に従業員IDをうけとり、従業員検索を行うメソッド 35 public EmpBean getEmpDataById(int empId) throws SQLException{ 36 EmpBean bean = null; 37 PreparedStatement pstatement = null; 38 ResultSet rs = null; 39 try { 40 //SQLを保持するPreparedStatementオブジェクトの生成 41 String sql = "SELECT * FROM employee WHERE employee_id=?"; 42 pstatement = connection.prepareStatement(sql); 43 //INパラメーターの設定 44 pstatement.setInt(1, empId); 45 //SQLの発行し、抽出結果が格納されたResultSetオブジェクトを取得 46 rs = pstatement.executeQuery(); 47 if(rs.next()) { 48 //列名を指定してResultSetオブジェクトから値を取得 49 bean = new EmpBean(); 50 bean.setId(rs.getInt("employee_id")); 51 bean.setName(rs.getString("employee_name")); 52 bean.setAddress(rs.getString("employee_address")); 53 bean.setAge(rs.getInt("employee_age")); 54 bean.setMail(rs.getString("employee_mail")); 55 } 56 //resultSetオブジェクトの解放 57 rs.close(); 58 }finally { 59 pstatement.close(); 60 } 61 62 return bean; 63 } 64} 65

EmpBean.java

java

1package kenmodel; 2 3import java.io.Serializable; 4 5public class EmpBean implements Serializable { 6 7 private int id; 8 private String name; 9 private String address; 10 private int age; 11 private String mail; 12 13 14 public int getId() { 15 return id; 16 } 17 public void setId(int id) { 18 this.id = id; 19 } 20 public String getName() { 21 return name; 22 } 23 public void setName(String name) { 24 this.name = name; 25 } 26 public String getAddress() { 27 return address; 28 } 29 public void setAddress(String address) { 30 this.address = address; 31 } 32 public int getAge() { 33 return age; 34 } 35 public void setAge(int age) { 36 this.age = age; 37 } 38 public String getMail() { 39 return mail; 40 } 41 public void setMail(String mail) { 42 this.mail = mail; 43 } 44} 45

IdSearch.java

java

1package kenservice; 2 3import java.util.ArrayList; 4 5import javax.servlet.http.HttpServletRequest; 6 7import kendao.EmpDao; 8import kenmodel.EmpBean; 9 10public class IdSearch { 11 public void execute(HttpServletRequest request) throws Exception{ 12 EmpDao daoTest = null; 13 String empId = request.getParameter("paramId"); 14 try { 15 if(empId != null && !empId.isEmpty()) { 16 daoTest = new EmpDao(); 17 EmpBean empBean = daoTest.getEmpDataById(Integer.parseInt(empId)); 18 if(empBean != null) { 19 ArrayList<EmpBean> empList = new ArrayList<EmpBean>(); 20 empList.add(empBean); 21 request.setAttribute("empList", empList); 22 }else { 23 request.setAttribute("message", "該当者はいません"); 24 } 25 }else { 26 request.setAttribute("message", "検索IDを入力して下さい"); 27 } 28 }finally { 29 if(daoTest != null) { 30 daoTest.close(); 31 } 32 } 33 } 34} 35

disp.jsp

jsp

1<%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 4<!DOCTYPE html> 5<html> 6<head> 7<meta charset="UTF-8"> 8<style type="text/css"> 9th{ 10 background-color: #FF9900; 11} 12.message{ 13 color: #800000; 14} 15</style> 16<title>従業員検索ページ</title> 17</head> 18<body> 19 <h1>従業員検索ページ</h1> 20 <form action="controller" method="post"> 21 <p>検索したい従業員IDを入力して下さい</p> 22 <p> 23 <input type="text" name="paramId" value=""/> 24 <input type="hidden" name="btn" value="IdSearch"/> 25 <input type="submit" value="検索"/> 26 </p> 27 </form> 28 <c:if test="${not empty requestScope.message }"> 29 <p class="message">${requestScope.message }</p> 30 </c:if> 31 <c:if test="not empty requestScope.empList}"> 32 <h2>検索結果</h2> 33 <table border="1" summary="検索結果をまとめた表"> 34 <tr> 35 <th>ID</th> 36 <th>名前</th> 37 <th>住所</th> 38 <th>年齢</th> 39 <th>Email</th> 40 </tr> 41 <c:forEach var="emp" items="${requestScope.empList}"> 42 <tr> 43 <td><c:out value="${emp.id}"/></td> 44 <td><c:out value="${emp.name}"/></td> 45 <td><c:out value="${emp.address}"/></td> 46 <td><c:out value="${emp.age}"/></td> 47 <td><c:out value="${emp.mail}"/></td> 48 </tr> 49 </c:forEach> 50 </table> 51 </c:if> 52</body> 53</html>

error.jsp

jsp

1<%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 4<!DOCTYPE html> 5<html> 6<head> 7<meta charset="UTF-8"> 8<style type="text/css"> 9th{ 10 background-color: #FF9900; 11} 12.message{ 13 color: #800000; 14} 15</style> 16<title>従業員検索ページ</title> 17</head> 18<body> 19 <h1>従業員検索ページ</h1> 20 <form action="controller" method="post"> 21 <p>検索したい従業員IDを入力して下さい</p> 22 <p> 23 <input type="text" name="paramId" value=""/> 24 <input type="hidden" name="btn" value="IdSearch"/> 25 <input type="submit" value="検索"/> 26 </p> 27 </form> 28 <c:if test="${not empty requestScope.message }"> 29 <p class="message">${requestScope.message }</p> 30 </c:if> 31 <c:if test="not empty requestScope.empList}"> 32 <h2>検索結果</h2> 33 <table border="1" summary="検索結果をまとめた表"> 34 <tr> 35 <th>ID</th> 36 <th>名前</th> 37 <th>住所</th> 38 <th>年齢</th> 39 <th>Email</th> 40 </tr> 41 <c:forEach var="emp" items="${requestScope.empList}"> 42 <tr> 43 <td><c:out value="${emp.id}"/></td> 44 <td><c:out value="${emp.name}"/></td> 45 <td><c:out value="${emp.address}"/></td> 46 <td><c:out value="${emp.age}"/></td> 47 <td><c:out value="${emp.mail}"/></td> 48 </tr> 49 </c:forEach> 50 </table> 51 </c:if> 52</body> 53</html>

---------環境-----------
Mac
Eclipse_2021-03
mysql-connector-java-8.0.25
taglibs-standard-impl(jstle)(spec)-1.2.5.jar
ビルドパス -Users/rei/Desktop/Workspace/mysql-connector-java-8.0.25

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

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

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

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

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

m.ts10806

2021/07/25 08:55

文章説明だけでは再現できませんので、実際のコードと、ビルドパスが分かる情報を記載してください。 > USBへコピーし これ、どうやりました? プロジェクトとしてエクスポート→インポートしないと おそらくそのまま再現は難しいかと思いますが。
退会済みユーザー

退会済みユーザー

2021/07/25 09:11

分かりました! USBのことですが適当なテキストエディタにコードをコピーアンドペーストして学校側で同じ名前のプロジェクトを作成してそこにコピーアンドペーストをしました。説明不足ですみません。
退会済みユーザー

退会済みユーザー

2021/07/25 09:35 編集

ビルドパスを載せ忘れました 環境のところに載せました
m.ts10806

2021/07/25 09:35

>USBのことですが適当なテキストエディタにコードをコピーアンドペーストして学校側で同じ名前のプロジェクトを作成してそこにコピーアンドペーストをしました。 それでは「プロジェクトの複製」にならないので元の環境を再現するのはかなり厳しいと思います。茨の道にもなり得ます。 eclipseは便利に(見ようによっては勝手に)プロジェクト管理のファイルを作ったりしているので(.projectとか.settingとか.classpathとか)それらもちゃんとエクスポートしてインポートされたほうが良いです。
退会済みユーザー

退会済みユーザー

2021/07/25 09:38

分かりました。 次からそうします!
guest

回答2

0

すみません、ドライバーのクラス名誤りのような回答しましたが、一応後方互換のために com.mysql.jdbc.Driver でもOKのようでした。

以下、元の回答。

EmpDao.javaで指定しているドライバーのクラス名が正しくありません。
mysql-connector-java-8.0.25はMySQL Connector/J 8.0に当たりますので、com.mysql.cj.jdbc.Driver としてください。

参考リンク
https://dev.mysql.com/doc/connector-j/8.0/en/connector-j-reference-driver-name.html

投稿2021/07/30 09:47

編集2021/07/30 09:59
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

もし、tomcatを使っているのなら、JDBCドライバをWEB-INF/libではなく、自分の使っているtomcatのlibフォルダに入れてみたらどうですか。

投稿2021/07/30 07:59

yoko_okubo

総合スコア17

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

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

退会済みユーザー

退会済みユーザー

2021/07/30 08:42

回答ありがとうございます!入れてみたところやっぱりダメみたいです...
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問