从Java中的Oracle过程中获取异常

时间:2014-11-06 22:18:49

标签: java oracle stored-procedures

大家好我现在正在解决这个问题,我有一个Oracle存储过程,这个通过给定的姓氏查找员工。但是当我发现没有行时,我想在Java中捕获No Data found异常。 这是程序

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调用异常,我的意思是如果没有数据,只需跳转到cath(例外){/ *没有数据发现消息* /}并显示有关此消息。

1 个答案:

答案 0 :(得分:3)

不会引发no_data_found异常,因为执行返回0行的查询不是错误。

如果你想考虑一个错误条件,调用者(在这种情况下是你的Java代码)需要尝试从游标中获取,发现没有返回任何行,然后引发一个异常(假设它确实在这种情况下有意义的是引发异常,而不仅仅是使用if)。这实际上涉及在Java代码中添加int以计算在循环中递增的行数,然后在if语句之后查看您的代码是否获取0行。 / p>