gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 22:36:30 25 4
gpt4 key购买 nike

大家好,我现在正在解决这个问题,我有一个 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;

}

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

最佳答案

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

如果您想考虑错误情况,调用者(在本例中是您的 Java 代码)将需要尝试从游标中获取数据,发现没有返回任何行,然后引发异常(假设它确实存在)在这种情况下,引发异常比仅使用 if 更有意义。实际上,这需要在 Java 代码中添加一个 int 来计算在循环中递增的获取行数,然后添加一个 if 语句来查看您的代码获取了 0 行。

关于java - 从 Java 中的 Oracle 过程获取异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26790471/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com