2014-11-06 46 views
0

你好,現在我正在處理這個問題,我有一個Oracle存儲過程,這個按照給定的姓氏找到僱員。但是當我發現沒有行時,我想捕獲Java中的無數據發現異常。 以下是過程從Java中的Oracle過程中獲得例外

FUNCTION GETEMPLOYEE_LASTNAME(LASTNAME IN VARCHAR2) RETURN CUREMPLOYEE_LASTNAME 
IS CUR_NAME CUREMPLOYEE_LASTNAME; 
BEGIN 
OPEN CUR_NAME FOR SELECT * FROM EMPLOYEE WHERE LAST_NAME = LASTNAME; 
RETURN (CUR_NAME); 
EXCEPTION when NO_DATA_FOUND 
then 
NULL; 
END GETEMPLOYEE_LASTNAME; 

這就是我如何使Java中的呼叫流程。

public List<String> getEmployeeList(String lastName) 
{ 
    List<String> listaEmp = new ArrayList<String>(); 
    try {   
     OracleCallableStatement oraCallStmt = null; 
     OracleResultSet deptResultSet = null; 

     oraCallStmt = (OracleCallableStatement) conn.prepareCall("{? = call DEPTOSYEMPDISPO.GETEMPLOYEE_LASTNAME(?)}" 
      ); 

     oraCallStmt.registerOutParameter(1, OracleTypes.CURSOR); 
     oraCallStmt.setString(2, lastName); 
     oraCallStmt.execute(); 
     deptResultSet = (OracleResultSet) oraCallStmt.getCursor(1);//This is the cursor with the data. 

     while(deptResultSet.next()) 
     { 
      System.out.println(deptResultSet.getString("LAST_NAME")); 
      String Resultado = deptResultSet.getInt("EMPLOYEE_ID") + "  " +deptResultSet.getString("LAST_NAME")+ "\t\t"; 
      listaEmp.add(Resultado); 
     } 

    } catch (SQLException e) { 
     //e.printStackTrace(); 
     System.out.println(e.getMessage()); 
    } 
    return listaEmp; 

} 

它的工作原理很好,當我發現數據,並在沒有數據沒有問題,但有一個方法來調用從Oracle例外,我的意思是如果沒有數據,就跳轉到該導管(例外){/ * NO DATA FOUND MESSAGE * /}並顯示關於此的消息。

+0

「cathExeptions()」是什麼意思? – 2014-11-06 22:27:39

+0

我的意思是,只是爲了cath(Exception){}塊。這很讓人困惑,我會編輯該部分。 – OscarLeif 2014-11-06 22:32:32

+0

如果你只是不處理存儲過程中的'NO_DATA_FOUND',會發生什麼?我想這會導致數據庫驅動程序在Java代碼中在客戶端引發'SQLException'。 – 2014-11-06 22:35:47

回答

3

no_data_found將引發異常,因爲執行返回0行的查詢並非錯誤。

如果你想考慮一個錯誤條件,調用者(在這裏是你的Java代碼)需要嘗試從遊標中獲取,發現沒有行被返回,然後引發一個異常(假設它在這種情況下真正有意義提出例外,而不僅僅是使用if)。這實際上涉及到在您的Java代碼中添加一個int來計算在您的循環中遞增的行數,然後在查找代碼後查看您的代碼是否獲取了0行。