由于违反主键约束,我收到此错误我的问题是如何捕获所有这些异常。
HTTP ERROR 500
Problem accessing /persist_role_servlet. Reason:
Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.4.1.v20121003-ad44345): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: java.sql.SQLException: Duplicate entry 'sd' for key 'PRIMARY'
Error Code: 1062
Call: INSERT INTO ROLE (ROLE_ID, ROLE_DESC, ROLE_NAME) VALUES (?, ?, ?)
bind => [3 parameters bound]
Query: InsertObjectQuery(com.example.rolessample.role@3f1179)
Caused by:
javax.persistence.RollbackException: Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.4.1.v20121003-ad44345): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: java.sql.SQLException: Duplicate entry 'sd' for key 'PRIMARY'
Error Code: 1062
Call: INSERT INTO ROLE (ROLE_ID, ROLE_DESC, ROLE_NAME) VALUES (?, ?, ?)
bind => [3 parameters bound]
这是我的 servlet 代码:
package com.example.rolessample;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.persistence.EntityManager;
import javax.persistence.EntityTransaction;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class persist_role_servlet extends HttpServlet {
/**
*
*/
private static final long serialVersionUID = 1L;
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
PrintWriter out = resp.getWriter();
String role_id = req.getParameter("role_id");
String role_name = req.getParameter("role_name");
String role_desc = req.getParameter("role_desc");
String comp_id = "";
String parent_comp = "";
String permission = "";
role r = new role();
r.setRole_id(role_id);
r.setRole_name(role_name);
r.setRole_desc(role_desc);
//Persisting the role bean .
EntityManager em = EMF.get().createEntityManager();
EntityTransaction tx = em.getTransaction();
tx.begin();
em.persist(r);
tx.commit();
String[] checkboxNamesList = req.getParameterValues("component");
for (int i = 0; i < checkboxNamesList.length; i++) {
String[] myCheckBoxValue = req
.getParameterValues(checkboxNamesList[i]);
//If null, it means checkbox is not in request, so unchecked
if (myCheckBoxValue == null) {
component comp = new component();
//Logic for finding component's name,component parent and their permissions.
String S1 = checkboxNamesList[i];
int lastUnderscore = S1.lastIndexOf("_");
permission = S1.substring(lastUnderscore + 1);
comp_id = S1.substring(0, lastUnderscore);
lastUnderscore = comp_id.lastIndexOf("_");
parent_comp = comp_id.substring(0, lastUnderscore);
comp.setComp_id(comp_id);
comp.setParent_comp(parent_comp);
comp.setRole_id(role_id);
comp.setPermission(permission);
//Persisting component bean .
tx.begin();
em.persist(comp);
tx.commit();
}
// if is there, it means checkbox checked
else {
out.println(checkboxNamesList[i] + "=checked");
}
}
// resp.setHeader("Refresh", "0; url=/guestbook.jsp");
}
}