Erreur:Exception [EclipseLink-4002] (Eclipse Services De Persistance - 2.4.1.v20121003-ad44345): org.eclipse.la persistance.des exceptions.DatabaseException

J'obtiens cette erreur, en raison de la contrainte de clé primaire violation ma question est comment puis-je attraper toutes ces exceptions .

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] 

Mon servlets code:

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");
}
}
Opérations de base de données directement dans le servlet, mauvaise conception & dépourvue de excpetion d'un mécanisme de gestion. Reportez-vous à la documentation - docs.oracle.com/javase/tutorial/essential/exceptions
Comment puis-je éviter exception d'un mécanisme de gestion ? Je veux dire,il doit lever une exception, et je dois gérer toutes ces . Mais le problème est que je n'ai pas l'exception qui capture et comment ?
Vous pouvez essayer de le trouver dans les journaux, c'est SQLException enveloppé dans DatabaseException, prises au plus tard. Avez-vous essayé de passer par le lien fourni, vous aidera à mieux comprendre.
try{ //la Persistance de la composante de haricot . tx.begin(); em.persist(comp); tx.commit(); } catch (SQLException ex) { System.err.println("Caught IOException:" + ex.getMessage()); }

OriginalL'auteur Deepesh Shetty | 2013-05-28