初めまして。
現在JSPの学習をしているものです。
もし何か、気になる箇所などございましたらご教授いただけたら幸いです。どうぞよろしくお願いいたします。
#作りたいもの
No、名前、場所(no,name,loc)の場所を登録できるシステムを作成したいです。
具体的には、「insert_top.jsp」にて入力した情報を「insert.jsp」にて受け取れるシステムを作成しようとしています。
#発生している問題
「executeUpdate」の例外処理をどのように行えばよいのかで苦戦しています。
insert_top.jspにて文字を入力し、「登録」ボタンを押すと下記のようなエラーが発生してしまいます。
タイプ 例外報告
メッセージ [/jsp/insert.jsp] の処理中に行番号 [26] で例外が発生しました。
説明 サーバーは予期しない条件に遭遇しました。それはリクエストの実行を妨げます。
例外
org.apache.jasper.JasperException: [/jsp/insert.jsp] の処理中に行番号 [26] で例外が発生しました。23: db = DriverManager.getConnection(DBUrl,DBUser,DBPassword);
24: sttSql=db.createStatement();
25:
26: sttSql.executeUpdate(strSql);
27:
28: sttSql.close();
29: db.close();
#私のコード
JSP
1<%@ page contentType="text/html; charset=UTF-8" %> 2 3<html> 4<head> 5<title>情報登録</title> 6</head> 7<body> 8<h1 style="background:#cccccc">情報登録</h1> 9<form method="POST" action="insert.jsp"> 10<table border="0"> 11<tr> 12<th style="color:#FFffFF;background:#0086b2;text-align:right;">NO</th> 13<td><input type="text" name="no" size="35" /></td> 14</tr> 15<tr> 16<th style="color:#FFffFF;background:#0086b2;text-align:right;">名前</th> 17<td><input type="text" name="name" size="50" /></td> 18</tr> 19<tr> 20<th style="color:#FFffFF;background:#0086b2;text-align:right;">場所</th> 21<td><input type="text" name="loc" size="50" /></td> 22</tr> 23<tr> 24<td colspan="2"> 25<input type="submit" value="登録" /> 26<input type="reset" value="取消" /> 27<input type="button" value="戻る" onClick="history.back()" /> 28</td> 29</tr> 30</table> 31</form> 32</body> 33</html>
JSP
1<%@ page contentType="text/html; charset=UTF-8" 2import="java.sql.*" %> 3<% request.setCharacterEncoding("UTF-8"); 4 5//接続情報 6String DBDriver = "com.mysql.jdbc.Driver"; 7String DBUrl = "jdbc:mysql://localhost:33××/××";//意図的に伏せています 8String DBUser = "root"; 9String DBPassword = "××";//意図的に伏せています 10 11//DB接続オブジェクト 12Connection db = null; 13 14//命令を管理するオブジェクト 15Statement sttSql = null; 16 17String strSql = "insert into DEPT(DEPTNO,DNAME,LOC) values(" + 18 request.getParameter("no") + ",'" + 19 request.getParameter("name") + "','" + 20 request.getParameter("loc") + "')"; 21 22Class.forName(DBDriver); 23 db = DriverManager.getConnection(DBUrl,DBUser,DBPassword); 24sttSql=db.createStatement(); 25 26sttSql.executeUpdate(strSql); 27 28sttSql.close(); 29db.close(); 30 31response.sendRedirect("list_top.jsp"); 32
#発見
どうやら、既に存在しているNo(主キー)と同一のものを入力しようとする場合にエラーが発生することが判明しました。リストに存在していないNoを登録すると、ちゃんと登録されます。
しかし、既に存在しているNoを入力したときにエラーが発生してしまうことを回避したいです。知恵のある方いらっしゃいますか。私も、エラーを適切に回避し「その番号は既に存在しています」と表示させることができるように試行錯誤してみます。
あなたの回答
tips
プレビュー