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

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

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

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

Q&A

解決済

2回答

32176閲覧

処理されない例外の型

sususu

総合スコア99

Java

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

0グッド

0クリップ

投稿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; } }

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

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

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

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

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

guest

回答2

0

ベストアンサー

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

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

投稿2018/02/21 04:49

maisumakun

総合スコア145121

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

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

sususu

2018/02/21 05:09

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

0

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

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

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

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

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

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

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

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

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

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

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

投稿2018/02/21 04:34

BeatStar

総合スコア4958

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

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

sususu

2018/02/21 05:04

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問