2016-09-16 16 views
0

我有一個index.jsp頁面,我將name和id插入到oracle表中。我能夠成功地插入,但是當用戶再次輸入相同的員工ID index.jsp頁面重定向到tomcat錯誤頁說如何獲得錯誤消息,如果記錄已經存在於jsp頁面的表中

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

我想內index.jsp顯示錯誤注意當用戶輸入ID是已經存在於數據庫。

<%@ 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> 
+0

這更多的是針對應用程序的架構實現。 **在您的應用程序中未實現驗證的典型問題**。你有沒有實施驗證? –

+0

你應該避免表示層中的java代碼:http://stackoverflow.com/questions/3177733/how-to-avoid-java-code-in-jsp-files –

+1

使用java'try .. catch ..finally'處理錯誤並確保正確的連接狀態,例如關閉它。 – Serg

回答

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()); 
} 
+0

謝謝普拉卡什..這對我來說很有用......它爲我工作..對於遲到的迴應抱歉,因爲我在過去的城市過去周:)。 – stephenjacob

1

將代碼放在try和catch塊中,當控件進入catch塊處理異常並顯示要顯示的消息時。

1

更具體地說,處理異常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(); 
    } 
+0

謝謝Rohit ...我嘗試使用這種異常處理方法它工作.. – stephenjacob

相關問題