【问题标题】:How to find out the exceptions will be thrown in method?如何找出方法中会抛出的异常?
【发布时间】: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 不同的实体有一个相同的字段

标签: sql exception methods max


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-20
    • 1970-01-01
    • 1970-01-01
    • 2014-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多