如何捕获从oracle到java的自定义引发的异常
我有一个oracle db,它在表上有一个触发器。如果满足某些条件,则会在删除时引发自定义异常。在Java中,我在DAO层中使用NamedParameterJdbcTemplate。结构是经典的控制器服务dao。如何在Java中捕获此异常的文本?提前谢谢。 这是我的扳机如何捕获从oracle到java的自定义引发的异常,java,reactjs,oracle,exception,error-handling,Java,Reactjs,Oracle,Exception,Error Handling,我有一个oracle db,它在表上有一个触发器。如果满足某些条件,则会在删除时引发自定义异常。在Java中,我在DAO层中使用NamedParameterJdbcTemplate。结构是经典的控制器服务dao。如何在Java中捕获此异常的文本?提前谢谢。 这是我的扳机 create or replace TRIGGER "ME"."EDITABLE_SETTINGS_DELETE" BEFORE DELETE ON "ME".&qu
create or replace TRIGGER "ME"."EDITABLE_SETTINGS_DELETE"
BEFORE DELETE ON "ME"."MAP_SETTINGS"
FOR EACH ROW
ENABLE
DECLARE
PRAGMA AUTONOMOUS_TRANSACTION;
CURSOR is_editable_cursor IS
select is_editable
from map_calculation mc
inner join map_calculation_group mg on mc.id_calc = mg.id_calc
where mg.id_calc = mc.id_calc and mg.id_settings = :old.id_settings;
TYPE is_editable_table IS TABLE OF VARCHAR2(1 CHAR);
v_is_editable is_editable_table;
BEGIN
OPEN is_editable_cursor;
FETCH is_editable_cursor BULK COLLECT INTO v_is_editable;
CLOSE is_editable_cursor;
IF ('F' MEMBER OF v_is_editable) THEN
RAISE_APPLICATION_ERROR( -20017, 'You cannot delete settings inn an uneditable calculation' );
END IF;
COMMIT;
END;
这是道
@Override
public void delete(Integer id) {
SqlParameterSource parameters = new MapSqlParameterSource().addValue("ID_SETTINGS", id);
try {
namedParameterJdbcTemplate.update(DELETE_SQL, parameters);
} catch (Exception e) {
log.error(e.getMessage());
throw new RuntimeException("Error during deletion: " + e.getMessage());
}
}
这是前面的按钮
<Button
variant='primary'
onClick={() => {
globalProps
.deleteItem()
.then(() => {
table.draw();
})
.catch((e) => {
console.log(e);
this.setState({ error: e.message });
this.setState({ showModalBatch: true });
});
this.props.toggleShowDelete();
}}
>
Удалить
</Button>
{
环球酒店
.deleteItem()
.然后(()=>{
table.draw();
})
.catch((e)=>{
控制台日志(e);
this.setState({error:e.message});
this.setState({showModalBatch:true});
});
this.props.toggleShowDelete();
}}
>
Удалить
我有一个显示消息的模式,它显示的只是“请求失败,状态代码为500”您能说明如何在数据库中引发异常吗?为什么它与捕获和处理任何其他异常不同?oracle中的自定义引发异常通常使用从-20001到-20999的代码。捕获或处理任何其他异常应该没有什么不同。我将使用一些codeEdited进行编辑,请看一看。您可以演示如何在数据库中引发异常吗?为什么它与捕获和处理任何其他异常不同?oracle中的自定义引发异常通常使用-20001到-20999的代码。捕获或处理任何其他异常应该没有什么不同。我将使用一些codeEdited进行编辑,请看一看我尝试过这个,但它说我不能使用SQLException,因为try中的语句从不抛出一个。不知怎的,没有这样的根本原因,因为在这种情况下,我根本没有得到任何模态…我尝试过这个,但它说我不能使用SQLException,因为try-never-throw-one中的语句没有这样的根本原因,因为在这种情况下,我根本没有得到任何模态。。。
try {
...
} catch (DataAccessException ex) {
if (ex.getRootCause() instanceof SQLException) {
SQLException sqlEx = (SQLException) ex.getRootCause();
int errorCode = sqlEx.getErrorCode();
if (errorCode == -20017) {
...
}
}
}