我有一个页面,正在将员工添加到表格中。在表中,我设置了一个复合键。如果我在应用程序中插入同一条记录,它会抛出错误“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");
}
}
所有这些页面都在代码中。但是,如果出现上述任何数据库错误,如何执行此警报或路由到另一个页面。请提出一些解决方案。
您可以创建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提醒()
。您可以尝试警报(
希望对你有帮助。