提问者:小点点

如何将数据库错误(如约束或 Web 应用程序中的任何错误)显示为警报或错误页


我有一个页面,正在将员工添加到表格中。在表中,我设置了一个复合键。如果我在应用程序中插入同一条记录,它会抛出错误“HTTP Status 500-PreparedStatementCallback;SQL[insert INTO EMPLOYEE_ROLE(EMP_NUM,ROLE,Status)VALUES(?,?,'LOGGEDIN')];ORA-00001:违反了唯一约束(EMPLOYEE_ROLE_PK)”

我的 JSP 页面:添加新用户详细信息

                         <%
                            System.out.println("your selected Emp_Num from script :"+request.getParameter("enum")+" "+request.getParameter("ename"));
                            String eNum=request.getParameter("enum");
                            String eName=request.getParameter("ename");
                            if(eNum!=null){
                                System.out.println("your selected Emp_Num inside servlet:"+eNum);
                                ArrayList<HashMap<String, String>> empList1 = UserJdbcGenericDao.empNameDetails_AA(eNum);
                                System.out.println("Size (servlet): "+empList1.size());
                                for (int i=0;i<empList1.size();i++) {%>
                                    <tr><td><label for="empNum">Employee Number:</label></td>
                                    <td>
                                    <select id="empNum" name="empNum">
                                    <option  value="<%=empList1.get(i).get("3")%>" selected="selected"><%=empList1.get(i).get("3")%></option>
                                    <%
                                        ArrayList<HashMap<String, String>> empList = UserJdbcGenericDao.empNumDetails_AA();
                                        for (int j=0;j<empList.size();j++) {
                                    %> 

                                    </select>
                                    <% }%>
                                    </td>

                                    <td><label for="empName">Employee Name:</label></td>                            
                                    <td>
                                        <select id="empName" name="empName" size="1">
                                            <option value="" selected="selected">Select Emp_Num:</option>
                                            <option value="" selected="selected"><%=empList1.get(i).get("0")+empList1.get(i).get("1")+empList1.get(i).get("2")%></option>       
                                        </select>
                               <% }
                            }else if(eName!=null){%>
                            </td><% 

                                System.out.println("your selected Emp_Num inside servlet:"+eName);
                                ArrayList<HashMap<String, String>> empList1 = UserJdbcGenericDao.empNameDetails_AAname(eName);
                                System.out.println("Size (servlet): "+empList1.size());
                                for (int i=0;i<empList1.size();i++) {%>

                                    <tr><td><label for="empNum">Employee Number:</label></td>
                                    <td>
                                    <select id="empNum" name="empNum" onchange="selectEmpNum()">
                                    <option value="" selected="selected"><%=empList1.get(i).get("3")%></option>
                                    <%
                                        ArrayList<HashMap<String, String>> empList = UserJdbcGenericDao.empNumDetails_AA();
                                        for (int j=0;j<empList.size();j++) {
                                    %> 

                                    </select>
                                    <% }%>
                                    </td>
                                    <td><label for="empFName">Employee Name:</label></td>                           
                                    <td>
                                        <select id="empFName" name="empFName" size="1">
                                            <option value="" selected="selected">Select Emp_Num:</option>
                                            <option value="" selected="selected"><%=empList1.get(i).get("0")+empList1.get(i).get("1")+empList1.get(i).get("2")%></option>       
                                        </select>
                               <% }
                            }%> 
                            </td>


                        </tr>
                        <tr>
                            <td><label for="empRole">Employee Role:</label></td>

                            <td>
                            <select name="empRole" id="empRole">
                            <option value="" > Select Employee Role</option>
                                <%
                                 ArrayList<HashMap<String, String>> roles = UserJdbcGenericDao.empDetails_AA();
                                for (int i=0;i<roles.size();i++) {%>                                        
                                <option value="<%=roles.get(i).get("0")%>"><%=roles.get(i).get("0")%></option>
                            <% }%>
                            </select>
                        </td>
                        </tr>
                        </tbody>                    
                        <tfoot>                         
                            <tr>                                
                                <td colspan="5" class="table-footer">                   
                                    <input type="submit" class="button round green text-upper"  value="save"  onClick="return userValidate()"/> 
                                    <input type="reset" class="button round green text-upper"  value="Cancel" onClick="pageCall()"/>
                                    <!--<a href="usermanagementAddt.jsp" class="button green text-upper">cancel</a> -->


                                </td>                                   
                            </tr>
                        </tfoot>                                
                    </table>

如果action=“insert”,控制器的工作方式如下:

    if(action.equalsIgnoreCase("insert"))
    {           
        System.out.println("inside insert service");
        UserManager user = new UserManager();



        System.out.println("Emp_Num value:"+request.getParameter("empNum"));
        user.setEmpNum(Long.parseLong(request.getParameter("empNum")));  

        System.out.println("Employee Name value is :"+request.getParameter("empName"));
        String empName=request.getParameter("empName");

        user.setEmpRole(request.getParameter("empRole"));
        System.out.println("Role value is :"+request.getParameter("empRole"));

        Boolean isAdd=dao.addUser(user);
        System.out.println("checking condition Value :"+isAdd);
        if(isAdd){
             System.out.println("Emp_Num value is :"+request.getParameter("empNum"));
             String emp_num=request.getParameter("empNum");
             String lastModifiedBy=hs.getAttribute("fullname").toString();
             hs.setAttribute("emp_num",emp_num);

             ArrayList<HashMap<String, String>> itemList =com.compass.banker.dao.jdbc.UserJdbcGenericDao.empuid(emp_num);

             int indexs = 0;
             for (int j=0;j<itemList.size();j++) {
userId=itemList.get(j).get("0");
System.out.println("your creating UserId is:"+userId);
MessageUser users = new MessageUser();
String LastModifiedBy=hs.getAttribute("fullname").toString();
                    System.out.println("lastModifiedBy :"+LastModifiedBy);

                    System.out.println("login User id:"+LastModifiedBy);
                    users.setLastModifiedBy(LastModifiedBy);

                    users.setUserId(userId);


                    String mText="Hi"+userId+"Your Account has been created by "+LastModifiedBy+"in Compass data base";

                     users.setmText(mText);
                     System.out.println("Message Text value is :"+mText);

                     Format formatter = new SimpleDateFormat("dd-MMM-yy");
                        String s = formatter.format(new Date());
                        System.out.println("Todays date is:"+s);
                        users.setLast_modified_date(s);




                    Boolean isAdded=dao.addUsers(users);

                    System.out.println("checking condition is:"+isAdded);

             }

             //Accessing the Email-Id to Send a confirmation Mail

             ArrayList<HashMap<String, String>> itemsList =com.compass.banker.dao.jdbc.UserJdbcGenericDao.empMail(emp_num);

             int index = 0;

             for (int i=0;i<itemsList.size();i++) {
                    eMail_id=itemsList.get(i).get("0");                     

                    setMailServerProperties();

                    String msg="This mail is from Pinovus Consulting Pvt Ltd<b>";

                    try {
                        createEmailMessage(eMail_id,msg);
                    } catch (AddressException e) {
                        System.out.println("Mailing Address is not correct in createMailMessage...."+e.getMessage());
                    } catch (MessagingException e) {
                        System.out.println("Message not send...."+e.getMessage());
                    }
                    try {
                        sendEmail();
                    } catch (AddressException e) {

                        System.out.println("Mailing Address is not correct in sendEmail...."+e.getMessage());
                    } catch (MessagingException e) {
                        System.out.println("Mail not send...."+e.getMessage());
                    }
            }
            //System.out.println("2.you have to send a confirmation mail to this mail_id:"+eMail_id[i]);   

             String var="One User Account added successfully";

             RequestDispatcher rd = request.getRequestDispatcher("/App_Admin/UsermanagementA.jsp?ref="+var);
               rd.forward(request, response);

            }else{
                System.out.println("Record not updated");
                response.sendRedirect("/App_Admin/statusMessage.jsp");
             }    

                    }       

所有这些页面都在代码中。但是,如果出现上述任何数据库错误,如何执行此警报或路由到另一个页面。请提出一些解决方案。


共3个答案

匿名用户

您可以创建Tomcat将服务的自定义错误页面,而不是500个(或其他):Tomcat 7中的自定义错误页,用于错误代码500。

您还可以针对当前情况,根据需要进行适当的异常处理并生成错误输出。

您还可以创建一个servlet过滤器来获取未处理的异常并适当地显示它们。

您也可以先检查现有条目,如果存在则不要尝试插入(但在多用户应用程序中出现竞争条件的情况下,随时准备处理错误)。

匿名用户

在您的代码< code>WEB-INF/web.xml中尝试这样做

<error-page>
<error-code>500</error-code>
<location>/Error.jsp</location>
</error-page>

匿名用户

在您的情况下,如果您需要将错误显示为警报,那么您可以使用javascript提醒()。您可以尝试警报(

希望对你有帮助。