Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Java中的Oracle过程获取异常_Java_Oracle_Stored Procedures - Fatal编程技术网

从Java中的Oracle过程获取异常

从Java中的Oracle过程获取异常,java,oracle,stored-procedures,Java,Oracle,Stored Procedures,大家好,我现在正在处理这个问题,我有一个Oracle存储过程,这个存储过程根据给定的姓氏查找员工。但是,当我没有找到行时,我希望捕获Java中的“找不到数据”异常。 这是程序 FUNCTION GETEMPLOYEE_LASTNAME(LASTNAME IN VARCHAR2) RETURN CUREMPLOYEE_LASTNAME IS CUR_NAME CUREMPLOYEE_LASTNAME; BEGIN OPEN CUR_NAME FOR SELECT * FROM EMPLOYEE W

大家好,我现在正在处理这个问题,我有一个Oracle存储过程,这个存储过程根据给定的姓氏查找员工。但是,当我没有找到行时,我希望捕获Java中的“找不到数据”异常。 这是程序

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;

}
public List getEmployeeList(字符串lastName)
{
List listaEmp=new ArrayList();
试试{
OracleCallableStatement oraCallStmt=null;
OracleResultSet deptResultSet=null;
oraCallStmt=(OracleCallableStatement)conn.prepareCall(“{?=调用DEPTOSYEMPDISPO.GETEMPLOYEE_LASTNAME(?)}”
);
oraCallStmt.registerOutParameter(1,OracleTypes.CURSOR);
oraCallStmt.setString(2,姓氏);
oraCallStmt.execute();
deptResultSet=(OracleResultSet)oraCallStmt.getCursor(1);//这是包含数据的游标。
while(deptResultSet.next())
{
System.out.println(deptResultSet.getString(“姓氏”);
String Resultado=deptResultSet.getInt(“员工ID”)+“”+deptResultSet.getString(“姓氏”)+“\t\t”;
listaEmp.add(Resultado);
}
}捕获(SQLE异常){
//e、 printStackTrace();
System.out.println(e.getMessage());
}
返回列表AEMP;
}

它工作得很好,当我找到数据并且没有数据时没有问题,但是有一种方法可以从oracle调用异常,我的意思是如果没有数据,只需跳转到cath(异常){/*找不到数据消息*/}并显示有关此的消息。

No
No\u data\u found
将引发异常,因为执行返回0行的查询不是错误


如果您想考虑错误情况,调用方(在这种情况下,您的java代码)需要从游标中获取,发现没有返回行,然后引发异常(假设在这种情况下,它确实有意义,以引发异常而不是仅使用<代码>如果)。实际上,这需要在Java代码中添加一个

int
来计算循环中递增的获取行数,然后在其后添加一个
if
语句来查看代码是否获取了0行。

什么是“cathExeptions()”意思?我的意思是,只需添加到cath(Exception){}块。我将编辑该部分。如果不处理存储过程中未找到的数据,会发生什么?我想这会导致数据库驱动程序在Java代码中的客户端引发
SQLException
in。它将返回空光标,没有问题。基于justin cave的回答,使用光标永远不会出现错误,因此没有例外,解决方案是在java中计算行数,并使用if来显示信息对话框。