Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Servlet捕获唯一约束异常_Java_Oracle_Exception_Servlets_Unique Constraint - Fatal编程技术网

Java Servlet捕获唯一约束异常

Java Servlet捕获唯一约束异常,java,oracle,exception,servlets,unique-constraint,Java,Oracle,Exception,Servlets,Unique Constraint,我正在尝试向名为rmas的表中插入一些数据 表格格式为 |rcode|rname|vcode|vanme 在这里,我为rcode设置主键 当我插入带有现有rcode的记录时,它会显示类似于违反了ORA-0000-1唯一约束的内容 如果我使用以下代码,即使在出现其他错误的情况下,它也会显示消息 catch(Exception e) { //out.println("rcode already exists"); } 所以,我只想捕获主键异常并显示为“rcode ready exist”。可能

我正在尝试向名为
rmas
的表中插入一些数据

表格格式为

|rcode|rname|vcode|vanme
在这里,我为rcode设置主键

当我插入带有现有rcode的记录时,它会显示类似于违反了ORA-0000-1唯一约束的内容

如果我使用以下代码,即使在出现其他错误的情况下,它也会显示消息

catch(Exception e)
{
 //out.println("rcode already exists");
}
所以,我只想捕获主键异常并显示为“rcode ready exist”。可能吗?如果是的话,怎么办


提前感谢

您正在捕获一个
异常
,它是所有异常的超类。通过捕捉这一点,您可以使用神奇宝贝风格(“要捕捉所有人!”),这通常是一种糟糕的做法,因为您无法根据代码块中抛出的特定异常采取不同的行动

仅捕获与约束冲突相关的异常,以避免显示每个异常的消息

我不明白为什么要在servlet上执行此操作,但我建议您查看解决方案的体系结构,并提供分层方法,在持久性层捕获此异常并返回您自己的结果代码,该代码定义应向用户显示的消息


注意:我使用结果代码而不是错误代码来允许返回成功操作的代码。

在servlet中不会有任何这样的代码。我认为它属于一个生活在持久层中的类。servlet是HTTP侦听器;它们不应该包含数据库代码

让您的基于接口的持久性类捕获该异常并适当地处理它。编写一个基于接口的服务,该服务使用持久性类来完成用例。让servlet调用服务,并根据发生的情况确定下一步要显示什么


它被称为分层体系结构。我强烈推荐它。

Exception
是所有异常的父项。如果您编写了
catch(Exception e){}
块,那么所有异常都将属于此类别。您需要找到编译器返回的异常。假设编译器返回此异常
SQLIntegrityConstraintViolationException
,则会出现以下块

catch(SQLIntegrityConstraintViolationException e) 
{
  // Error message for integrity constraint violation
}
catch(NullPointerException e)
{
  // Null Pointer exception occured.
}
catch(Exception e)
{
 // Other error messages
}

通过这种方式,您可以拥有任意数量的异常块。但要确保先编写更具体的异常类型,然后编写父异常在我的spring boot应用程序中,我使用了DataIntegrityViolationException来捕获这样的唯一约束:

try {
    userRepository.save(user);
    log.debug("Created Information for User: {}", user);
} catch (DataIntegrityViolationException e) {

}

我将以以下方式捕捉:

catch(Exception ex){
      if(ex.getMessage().contains("UNIQUE KEY"))
           return "Error - Unique Key Violation!!";
      else if(ex.getMessage().contains("FOREIGN KEY"))
           return "Error - Foreign Key Violation!!";
      else
          return "Other Error: " + ex.getMessage();
}

希望它简单实用

看看您的编译器,它会抛出哪个异常。我的意思是异常类型查看编译器它应该的异常类型它会抛出
java.sql.BatchUpdateException