让这个方法调用:
->
simpleJdbcTemplate.queryForInt(SQL,null);
->queryForInt()方法在SimpleJdbcTemplate中抛出一个DataAccessException,这是一个运行时异常。我想向应用程序的视图层发布异常,因为Spring将检查异常包装在RuntimeExceptions中,所以我一直停留在这里。
我该怎么做?
解释1:
Spring框架的JDBC抽象框架提供的增值--他们说Spring框架处理了除3和6. 3和6以外的所有东西,需要由应用程序开发人员编写代码。
定义连接parameters
执行工作
但是,如果我遇到一种情况,即连接到数据库的连接在一定时间后丢失,程序就会启动。然后,当调用上述方法made.since (我不处理无法通知用户界面(视图)的异常)时,将引发运行时异常。
发布于 2009-05-14 17:58:06
它取决于您的视图层是否捕获检查的异常(不是RuntimeException或Error子类的throwable子类,或者不是RuntimeException或错误的直接实例),还是未检查的异常(RuntimeException或这些Throwable子类的错误或子类)。
通常,您要么有这样的东西:
try {
//... processing
} catch(Exception/RuntimeException e) {
// propagate the exception to the view in a meaningful manner
}如果是这样的话,对于运行时异常,您就不需要做任何事情了--这个块将捕获运行时异常。
假设您使用的是支持包装异常的Java版本,如果您想将其转换为checked,只需做以下工作:
try {
//...spring code
} catch(DataAccessException e) {
throw new Exception(e);
}然后,该处理之上的层将将其作为检查异常捕获。
发布于 2009-05-14 18:45:20
Spring抛出运行时异常并不意味着您无法捕获它。如果您想为DataAccessExceptions做一些特别的事情,您当然可以这样做:
try {
// query logic
} catch (DataAccessException ex) {
// handle the exception
}如果您使用的是Spring的MVC框架,那么可能值得研究一下ExceptionResolver接口。它是一种机制,用于决定如何处理应用程序底层抛出的所有未被处理的异常。它为您提供了最后一次基于抛出的异常显示不同视图的机会。
发布于 2009-05-14 17:58:49
您只想访问视图中的原始异常信息吗?如果是这样的话,您应该能够在RuntimeException上调用RuntimeException()来获取导致它的底层检查异常。否则,您将需要向使用SimpleJdbcTemplate的方法添加一个“抛出”声明,捕获DataAccessException并重新抛出已包装的检查异常。
https://stackoverflow.com/questions/864780
复制相似问题