sql - 如何找出方法中会抛出的异常?
问题描述
我有这个代码和这个异常处理。如何找出所有可能的异常将被抛出并处理?我的处理不正确?我想到了 SQLException、NullPointer- 等。我需要从 3 个表中找到每年的最大数量。可以有哪些例外?
public Integer getMaxNumberByYear(String year){
String queryStr = "SELECT MAX(trip_card_number)\n" +
" FROM (SELECT trip_card_number FROM employee_trip_cards\n" +
" WHERE EXTRACT(YEAR FROM card_Issue_Date) = '" + year + "'\n" +
" UNION ALL\n" +
" SELECT trip_card_number FROM postgraduate_trip_cards\n" +
" WHERE EXTRACT(YEAR FROM card_Issue_Date) = '" + year + "'\n" +
" UNION ALL\n" +
" SELECT trip_card_number FROM students_trip_cards \n" +
" WHERE EXTRACT(YEAR FROM card_Issue_Date) = '" + year + "'\n" +
" )";
try {
Integer result = ((BigDecimal) getSessionFactory().getCurrentSession().createSQLQuery(queryStr).uniqueResult()).intValue();
if (result==null){
throw new NullPointerException("Can't find the maximum");
}
return result;
} catch (NullPointerException e){
e.printStackTrace();
Utils.getSystemLogger().log(e);
return 0;
}
}
解决方案
首先,不需要抛出 NullPointerException 然后在同一个方法中捕获它。您编写的内容看起来像是处理带有异常的逻辑,这并不好。考虑写:
if (result==null){
Utils.getSystemLogger().log("Can't find the maximum");
return 0;
}
return result;
如果 0 是该方法的允许返回值,否则不捕获异常。
您不必提前考虑并找到所有可能的例外情况。如果您还不知道可能的异常,您也不知道如何从它们中恢复,因此最好让它们被抛出并稍后调试。
推荐阅读
- javascript - PDF 查看器部分无法在视网膜屏幕上呈现图像
- raspberry-pi - 在 raspbian 上找不到 chromium-flags.conf
- javascript - RNCalendarEvents.saveEvent() 问题错误:未设置日历
- matlab - 为什么当我多次训练一个网络模型时,我得到不同的训练模型和不同的结果?
- javascript - 按最小对象值区分对象数组
- java - 自动将主键从身份(int)转换为字符串
- angular - 单击按钮时将值设置为文本区域
- javascript - 模态关闭并更新数据,但屏幕显示为暗
- c++ - 将 mwArray 转换为 std::vector
- javascript - 使用布尔标志来整理我的功能