【发布时间】:2020-02-10 08:23:21
【问题描述】:
我有这段代码和这个异常处理。如何找出所有可能的异常将被抛出并处理?我的处理不正确?我考虑 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;
}
}
【问题讨论】:
-
您应该查看
createSQLQuery()的签名,看看它可能会抛出什么异常。 -
你抛出异常只是为了捕获它并返回 0 似乎很奇怪。为什么不在 if 语句中返回 0?
-
@TimBiegeleisen 它只有 HibernateException。如果抛出异常,我将结果设置为 0 可以吗?
-
为什么不同的trip_cards 表?考虑一个常见的 trip_cards 表。
-
@jarlh 不同的实体有一个相同的字段