首页 > 解决方案 > 如何找出方法中会抛出的异常?

问题描述

我有这个代码和这个异常处理。如何找出所有可能的异常将被抛出并处理?我的处理不正确?我想到了 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;
        }

    }

标签: sqlexceptionmethodsmax

解决方案


首先,不需要抛出 NullPointerException 然后在同一个方法中捕获它。您编写的内容看起来像是处理带有异常的逻辑,这并不好。考虑写:

    if (result==null){
       Utils.getSystemLogger().log("Can't find the maximum");
       return 0;
    } 
    return result;

如果 0 是该方法的允许返回值,否则不捕获异常。

您不必提前考虑并找到所有可能的例外情况。如果您还不知道可能的异常,您也不知道如何从它们中恢复,因此最好让它们被抛出并稍后调试。


推荐阅读