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

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

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

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

Q&A

解決済

処理されない例外の型

sususu
sususu

総合スコア99

Java

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

2回答

0グッド

0クリップ

25751閲覧

投稿2018/02/21 04:14

下記のようなコードを書いていると
Customer customer = dao.search(loginname,password);//カスタマーDAOで見つけた値をcustomerに代入
の部分でエラー表示が出て**「処理されない例外の型」**と出ます。
この表示が出る理由と対処法を教えていただけますでしょうか?
よろしくお願いいたします。

OS windows10
エディション enterprise
言語 java8.0.1310.11
MariaDB10.1
HeidiSQL
eclipse NEON

package NewOne; import java.io.IOException; 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; import beans.Customer; import dao.CustomerDAO; /** * Servlet implementation class Login */ @WebServlet("/Login") public class Login extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub //response.getWriter().append("Served at: ").append(request.getContextPath()); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub //doGet(request, response); request.setCharacterEncoding("utf-8"); response.setCharacterEncoding("utf-8"); HttpSession session = request.getSession();//セッション用意 String loginname = request.getParameter("loginname");//パラメータ取得 String password = request.getParameter("password");//パラメータ取得 CustomerDAO dao = new CustomerDAO();//カスタマーDAOインスタンス化 Customer customer = dao.search(loginname,password);//カスタマーDAOで見つけた値をcustomerに代入 if(customer != null){ session.setAttribute("customer", customer);//見つかったらセッションに入れる! request.getRequestDispatcher("login-ok.jsp").forward(request, response);//ログイン完了のページへ }else{ request.getRequestDispatcher("login-error.jsp").forward(request, response);//ログインエラーのページへ } } }

dao.searchメソッドは下記のとおりです。

package dao; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import beans.Customer; public class CustomerDAO extends DAO { public Customer search(String loginname,String password) throws Exception{ Customer customer = null; Connection con = getConnection(); PreparedStatement st = con.prepareStatement("select* from customer where loginname=? and password=?"); st.setString(1, loginname); st.setString(2, password); ResultSet rs = st.executeQuery(); while(rs.next()){ customer = new Customer(); customer.setId(rs.getInt("id")); customer.setLoginname(rs.getString("Loginname")); customer.setPassword(rs.getString("password")); } st.close(); con.close(); return customer; } }

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

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

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

下記のような質問は推奨されていません。

  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

回答2

4

ベストアンサー

CustomerDAO.searchthrows Exceptionがあるので、このメソッドを使う側で「throws Exceptionする」、あるいは「Exceptionの例外を処理する」必要が出てきます。このように、RuntimeException以外の例外が飛ぶ場合は検査例外といって、正しく処理しないとコンパイルすら通りません。

なお、よほどの理由がない限り、throws Exceptionを宣言するのは幅が広すぎます(何が来るのかわからないと、例外を処理する方も大変になります)。おそらく、java.sql.SQLExceptionあたりまで絞れるかと思います。

投稿2018/02/21 04:49

maisumakun

総合スコア142258

kaminagai, BeatStar, LouiS0616, sususu👍を押しています

下記のような回答は推奨されていません。

  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

回答へのコメント

sususu

2018/02/21 05:09

ご回答ありがとうございます! CustomerDAOのthrowsExceptionと連携していたのですね。 例外を絞る事と例外の種類をもっと勉強しなおそうと思います! 今回は構造が分かって助かりました! ありがとうございました!

1

このDAO っていうのもわかりませんし、Java自体使い慣れていないですが。
( 一応趣味でC++ )

このエラーメッセージはたぶん、「例外処理されていない」ことが原因かもしれない。

具体的にどれが投げているかわかりませんが、

CustomerDAOクラスあたりが何かしらの例外を投げていて、catchされていないためとか。

それか、存在しない例外クラスを投げているとか。

もしかするとJavaでは クラスやメソッドに throws 例外 と記載したら

少なくとも一回は投げる処理がないとダメとか?

( ifとかで 投げる場合と投げない場合の2種類用意できるとしても、内部で一回はthrowがないとダメとか. )

C++ではそれはありえませんが、Javaだとどうだろう?

少なくとも例外処理関係だろうと思う。

それかそれより前の処理とか。

投稿2018/02/21 04:34

BeatStar

総合スコア4956

sususu👍を押しています

下記のような回答は推奨されていません。

  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

回答へのコメント

sususu

2018/02/21 05:04

ご返信ありがとうございました。 例外処理についてtryとcatchを勉強しなおしたいと思います!

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

ただいまの回答率
86.02%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Java

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