2016-09-16 23 views
0

私はindex.jspのページから、oracleテーブルにnameとidを挿入しています。私は正常に挿入することですが、ユーザーが再び同じ従業員IDを入力したときにindex.jspページには、Tomcatのエラーページにリダイレクトするユーザーが既に存在しているIDを入力したときに、私はindex.jsp内のエラーノートを表示したいjspページのテーブルにレコードが既に存在する場合のエラーメッセージの取得方法

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

語りますデータベース。

<%@ 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ブロック内のコードを囲みます。

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

関連する問題