如果记录已经存在于jsp页面的表中,如何获取错误消息

Posted

技术标签:

【中文标题】如果记录已经存在于jsp页面的表中,如何获取错误消息【英文标题】:how to get error message if record is already present in table in jsp page 【发布时间】:2016-09-16 09:20:30 【问题描述】:

我有一个index.jsp 页面,我从该页面将名称和ID 插入到oracle 表中。我可以成功插入,但是当用户再次输入相同的员工 ID index.jsp 页面重定向到 tomcat 错误页面说

HTTP Status 500 javax.servlet.ServletException: java.sql.SQLIntegrityConstraintViolationException: ORA-00001: unique constraint

当用户输入数据库中已经存在的 id 时,我想在 index.jsp 中显示错误注释。

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body><center>
  <H1>Inserting record into a Database</H1>
       <%@ page language="java" %>
        <%@ page import="java.sql.*" %>
         <%@ page import="java.sql.DriverManager.*" %>

            <% 
        int flag=0;
        PreparedStatement ps=null;
        Connection con= null;
        ResultSet rs= null;
        Class.forName("oracle.jdbc.driver.OracleDriver");
        con=DriverManager.getConnection("hostname","user","admin");
        Statement st=con.createStatement();

            String id = request.getParameter("id");  
            String name= request.getParameter("name");


            ResultSet resultset = 
                    rs=st.executeQuery("INSERT INTO employee (employeeid,employeename)VALUES ('"+id+"','"+name+""); 
            out.println("Data is successfully inserted!");

       %> 
 </center>           
</body>
</html>

【问题讨论】:

这更倾向于应用程序的架构实现。 未在您的应用程序中实施验证的典型问题。你实施了验证吗? 你应该避免在表示层中使用java代码:***.com/questions/3177733/… 使用 java try.. catch ..finally 处理错误并确保正确的连接状态,例如关闭它。 以下答案是否解决了您的问题?如果是,那么您可以接受它,以便其他有同样问题的人受益。 【参考方案1】:

使用try-catch 块来处理异常。

你可以做的就是检查记录是否已经存在于表中。

如果存在相同的id,则不要执行插入操作。

try
        int flag=0;
        PreparedStatement ps=null;
        Connection con= null;
        ResultSet rs= null;
        Class.forName("oracle.jdbc.driver.OracleDriver");
        con=DriverManager.getConnection("hostname","user","admin");
        Statement st=con.createStatement();

        String id = request.getParameter("id");  
        String name= request.getParameter("name");

        // Check if the "id" is already present in table or not
        rs = st.executeQuery("SELECT * FROM employee WHERE employeeid" = id );   
        if (!rs.next() ) 

            // id is not present then insert the new record
            rs = st.executeQuery("INSERT INTO employee (employeeid,employeename)VALUES ('"+id+"','"+name+""); 
            System.out.println("Data is successfully inserted!");

         else

            // id is already present then show the error message
            System.out.println("Data is already present in table!");
        

 catch(Exception e)

    // Handle any other exception occuring 
    System.out.println("Exception : " + e.printStackTrace());

【讨论】:

谢谢 Prakash .. 这对我很有用...它对我有用.. 很抱歉回复晚了,因为我上周不在城里 :)。【参考方案2】:

将代码包含在try和catch块中,当控件进入catch块时处理异常并显示你想要显示的消息。

【讨论】:

【参考方案3】:

更具体地说,处理异常SQLIntegrityConstraintViolationException。此异常表示违反了完整性约束(外键、主键或唯一键)。

try
    int flag=0;
    PreparedStatement ps=null;
    Connection con= null;
    ResultSet rs= null;
    Class.forName("oracle.jdbc.driver.OracleDriver");
    con=DriverManager.getConnection("hostname","user","admin");
    Statement st=con.createStatement();

        String id = request.getParameter("id");  
        String name= request.getParameter("name");


        ResultSet resultset = 
                rs=st.executeQuery("INSERT INTO employee (employeeid,employeename)VALUES ('"+id+"','"+name+""); 
        out.println("Data is successfully inserted!");

   catch(SQLIntegrityConstraintViolationException e )
        //Duplicate entry '' for key 'PRIMARY'
        System.out.println(e.getMessage());//you can modify the output as per your requirement.
    catch (Exception e) 
        e.printStackTrace();
   

【讨论】:

谢谢 Rohit ...我尝试使用这种异常处理方法,它有效..

以上是关于如果记录已经存在于jsp页面的表中,如何获取错误消息的主要内容,如果未能解决你的问题,请参考以下文章

如何从具有多个页面的表中获取表记录?

使用 Doctrine ORM 如何从自己的表中获取一个表来存储记录?

如何获取另一个表中不存在的表的记录?

如何在for循环中执行准备好的语句以从jsp中的表中获取数据?

如何在 apache pig 中将列添加到已经存在的表中

从 servlet 获取值并将其显示在 JSP 的表中 [重复]