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

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

新規登録して質問してみよう
ただいま回答率
85.48%
サーブレット

サーブレット(Servlets)とはウェブやアプリケーションサーバー上に動くプログラムのことであり、ウェブブラウザや他のHTTPクライエントとデータベースやHTTPサーバー上のアプリケーションの中間層としての働きをします。

例外処理

例外処理(Exception handling)とは、プログラム実行中に異常が発生した場合、通常フローから外れ、例外として別の処理を行うようにデザインされたプログラミング言語構造です。

Q&A

解決済

2回答

637閲覧

ドライバを用いて、意図的に例外処理を発生させたい

ypk

総合スコア80

サーブレット

サーブレット(Servlets)とはウェブやアプリケーションサーバー上に動くプログラムのことであり、ウェブブラウザや他のHTTPクライエントとデータベースやHTTPサーバー上のアプリケーションの中間層としての働きをします。

例外処理

例外処理(Exception handling)とは、プログラム実行中に異常が発生した場合、通常フローから外れ、例外として別の処理を行うようにデザインされたプログラミング言語構造です。

0グッド

0クリップ

投稿2020/07/07 07:37

初めまして。
現在Javaのサーブレットを勉強しているものです。
前回の質問に続きです。

https://teratail.com/questions/273760#reply-390689

現在、下記のソースコードにて、ドライバを作成して意図的にLogin.javaの例外処理を発生させようとしています。
しかし、どのようなソースコードを書いたドライバで例外処理を発生させればよいかが分かりません。

ちなみにDAOはDBに接続していません。接続していませんが、

request.setAttribute("dbConnectionError", "データベース接続にエラーが発生しました。"); getServletContext().getRequestDispatcher("/errorMessage.jsp").forward(request, response);

を発生させたいと考えています。

もし何か、ご存知の方がいらっしゃいましたら教えていただけると嬉しいです。丸投げに近い質問で申し訳ございません。
どうぞよろしくお願いいたします。

#例外処理を発生させたいソースコード

Login

#付随するソースコード

DAO

1package dao; 2 3import java.io.Serializable; 4import java.sql.SQLException; 5import java.util.ArrayList; 6 7import exam.LoggerTester; 8 9public class UserDAO implements Serializable { 10 11 //アクセサメソッド 12 private String _loginid; 13 private String _userpassword; 14 private int _admin; 15 private String _name; 16 17 public void setloginid(String loginid) { 18 this._loginid = loginid; 19 } 20 public String getloginid() { 21 return this._loginid; 22 } 23 24 public void setuserpassword(String userpassword) { 25 this._userpassword = userpassword; 26 } 27 public String getuserpassword() { 28 return this._userpassword; 29 } 30 31 public void setadmin(int admin) { 32 this._admin = admin; 33 } 34 public int getadmin() { 35 return this._admin; 36 } 37 38 public void setname(String name) { 39 this._name = name; 40 } 41 public String getname() { 42 return this._name; 43 } 44 45 46 //セットした情報を取得 47 public ArrayList<UserDAO> selectUser(String loginid, String userpassword) 48 throws ClassNotFoundException,SQLException{ 49 50 51 52 if("00014".equals(loginid) && "aiueo".equals(userpassword)) { 53 54 ArrayList<UserDAO> user = new ArrayList<UserDAO>(); 55 56 UserDAO info = new UserDAO(); 57 info.setloginid("00014"); 58 info.setadmin(0); 59 info.setname("aiueo"); 60 61 user.add(info); 62 63 // 戻り値の設定 64 return user; 65 66 67 }else { 68 69 return null; 70 } 71 72} 73} 74コード

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

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

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

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

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

guest

回答2

0

ベストアンサー

行いたいことがLoginサーブレットからデータベースを問い合わせた際に何らかの例外を出したいのであれば、記載していただいた実装をそのまま使うならselectUserメソッド内で何らかの例外を明示的にスローすれば良いのではないでしょうか。

(メソッドの命名や実装内容や、ドライバ?としているものの違和感がありますが、それは置いとくとして)

投稿2020/07/07 07:54

A-pZ

総合スコア12011

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

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

ypk

2020/07/07 08:07

ありがとうございます。 throw を使うという意味でしょうか。 知識不足で申し訳ないのですが、どのようなソースコードを記述すればよいか教えていただけると嬉しいです。」どうぞよろしくお願いいたします。
A-pZ

2020/07/07 08:17

スローしたい例外がどういったものなのか、どういった目的なのかによって変わるかと。 私の推測では、データベースに問い合わせたときに例外を発生させたいのであれば、ご自身が書かれたSQL文をわざと間違えれば、SQLExceptionがスローされます。
ypk

2020/07/07 08:27

ご丁寧にありがとうございます。やってみます。
guest

0

DAO側からなにかしら例外をスローしてやればいいのではないでしょうか。

具体的にはUserDAOクラスにダミーのDB接続関数を作って中で例外を投げたり、ダミーの値を返したりして、テスト時はそちらを呼ぶ、というような処理にしておけば良いと思います。

投稿2020/07/07 07:47

KoichiSugiyama

総合スコア3041

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

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

ypk

2020/07/07 08:06

ありがとうございます。 ArrayList<UserDAO> user = new ArrayList<UserDAO>(); //DB接続情報の準備(自分の環境に合わせて修正:DB名、パスワード) final String DB_DRIVER = "com.mysql.cj.jdbc.Driver"; final String DB_URL = "jdbc:mysql://localhost:3306/aiueo"; final String DB_USER = "root"; final String DB_PASSWORD = "aiueo"; Connection con = null; String sql = null; PreparedStatement ps = null; // DB情報の取得 Class.forName(DB_DRIVER); con = DriverManager.getConnection(DB_URL,DB_USER,DB_PASSWORD); sql = "SELECT * FROM dept1 ORDER BY deptno"; ps = con.prepareStatement(sql); UserDAO info = new UserDAO(); といった具合にダミーの接続情報をDAOに追記したところ、例外処理を発生させることができました。こういった意味でしょうか。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問