erenyaaayger
@erenyaaayger (izuku midoriya)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

Javaサーブレット MySQLとの接続がうまくいかない

解決したいこと

データベースへの接続がうまくいかない

Javaのサーブレットでログイン機能の実装をしております。
ユーザー名とパスワードを入力画面に入力し、POSTした際にデータベースにある情報と照合させ、照合したらログイン成功したページへ遷移する仕組みになります。

発生している問題・エラー

JDBCドライバのロードが失敗して、
上記プロセスでpostすると以下のとおりエラーメッセージがでます。
スクリーンショット 2022-08-29 234125.png

該当するソースコード

このエラーメッセージは以下コードのJDBCドライバのロードがうまくいっていないために出ているエラーメッセージになります。

SqlDao.java
package dao;

import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import config.DBconfig;
import dto.LoginUser;

//アクセスロジック(DAO)
public class SqlDao {
		//DBconfig.propertiesのフルパス
		public final String file_path = "C:/pleiades/2022-06/workspace/ManagementSystem/DBconfig.properties";
		//DBconfigのオブジェクト生成
		DBconfig config = new DBconfig();
		
		//ログイン認証のメソッド
		public List<LoginUser> check(String user,String password)throws IOException{
			//DBconfig.propertiesの各値をlist形式で取得
			String[] DbInfo = config.getDBinfo(file_path);
			
			//DBconfig.propertiesのurlを取得
			String url = DbInfo[0];
			//DBconfig.propertiesのuserを取得
			String db_user_name = DbInfo[1];
			//DBconfig.propertiesのpasswordを取得
			String db_password = DbInfo[2];
			
			//login_user_tbのうち指定されたnameかつpasswordのものを検索するSQL文
			String sql = "select * from login_user_tb" + "where name = ? and password = ?";
			
			//ログインユーザのオブジェクト生成(DTO)
			LoginUser login_user = new LoginUser();
			List<LoginUser> user_info = new ArrayList<LoginUser>();
			
			//JDBCドライバのロード
			try{
				  Class.forName("com.mysql.cj.jdbc.Driver");
		        } catch (ClassNotFoundException e){
		          throw new IllegalStateException("失敗しました。");
		     }
			
			//データベースへの接続
			try(Connection conn = DriverManager.getConnection(url,db_user_name,db_password)){
				PreparedStatement stmt = conn.prepareStatement(sql);
				//変数sqlの1番目の?に引数のuserをセットする
				stmt.setString(1,user);
				//変数sqlの2番目の?に引数のpasswordをセットする
				stmt.setString(2,password);
				//sqlを実行し該当するデータを格納
				ResultSet rs = stmt.executeQuery();
				
				if(rs.next()) {
					login_user.setId(rs.getInt("id"));
					login_user.setName(rs.getString("name"));
					login_user.setPassword(rs.getString("password"));
					user_info.add(login_user);
				} else {
					login_user.setName("No user");
					login_user.setPassword("Not match password");
					user_info.add(login_user);
				}
			}catch (SQLException e) {
				e.printStackTrace();
			}
			return user_info;
		}
}

jarファイルは下記とおりの参照ライブラリーに読み込まれております。
スクリーンショット 2022-08-29 234450.png

サーブレットなしの時はJDBCドライバへのロードは成功していたため、なぜ、サーブレットにしたとたんロードがうまくいかないのか原因がわかりません。。

どなたかご教示いただけますよお願いいたします。

0

1Answer

Comments

  1. @erenyaaayger

    Questioner

    ご回答ありがとうございます。
    サーブレットではないときはjarファイルをsrc/WEB-INF/libにいれる作業をしていなかったので完全に盲点でした。
    動的Webプロジェクトの時はここにjarファイルを入れる必要があるのですね。ありがとうございます。

Your answer might help someone💌