【问题标题】:How do I allow a program to continue running depsite an Exeption/error happening? [duplicate]尽管发生异常/错误,我如何允许程序继续运行? [复制]
【发布时间】:2020-04-17 12:52:22
【问题描述】:

所以我有一个问题。由于“NullpointExeption”,我的 RPC 调用将失败。这意味着一列包含 null 值。这是有意为之,因为我会在某个时候用值填充此列。如何允许 Java 代码通过错误处理忽略/或允许此错误发生??

@Override
public List <BreakRegistered> getAllRegisteredBreaks() throws IllegalArgumentException {

   List<BreakRegistered> resultsfromquery = null;
   ResultSet resultSet = null;

   try {
       //Execute query kaldes på resultsetter, fordi der kun nedhentes data
       resultSet = getAllEmployeesBreaks.executeQuery();
       resultsfromquery = new ArrayList<BreakRegistered>();

       while (resultSet.next()) {
           resultsfromquery.add(new BreakRegistered(
                   resultSet.getTimestamp("time").toString(),
                   resultSet.getTimestamp("checkedOut").toString(),  //Error occurs HERE!
                   resultSet.getString("navn"),
                   resultSet.getInt("medarbejderID")));
       }
   } catch (SQLException sqlException) {
       throw new IllegalArgumentException(" \"getBreaks\" fejlede");
   } finally {
       try {
           resultSet.close();
       } catch (SQLException sqlException) {
           sqlException.printStackTrace();
           close();
       }
   }

   return resultsfromquery;
}

【问题讨论】:

  • 我很好奇您是如何发现自己处于执行 SQL 的水平但从未遇到过NullPointerException 的?特别是因为你已经有一个 catch 块,你可以复制它的逻辑?
  • 在调用 toString 方法之前,检查它是否为空。如果为null,则转到下一个,如果不是,使用toString
  • resultSet.getTimestamp("checkedOut") 是否返回 null。你对字符串"null" 还好吗?如果这两个答案都是肯定的,那么使用String.valueOf(resultSet.getTimestamp("checkedOut"))
  • @JohannesKuhn,你真的救了我。您的评论简单快捷地解决了我的愚蠢问题。非常感谢。我确实有问题。我的数据表现在在列中将“Null”打印为文本。我该如何打印“”。我可以在服务器方法中添加一些 if 逻辑吗?
  • 查看下面的答案。适应其中之一。 (显然,我的第二个问题的答案是否定的,但至少它回答了第一个问题)

标签: java error-handling syntax nullpointerexception


【解决方案1】:

暗示resultSet.getTimestamp("checkedOut") 正在返回null。您需要检查该之前您尝试尊重对象调用toString()

一个典型的结构可能是:

Object time = resultSet.getTimestamp("checkedOut");  //Or use a more specific type
String timeAsString;
if ( time != null)
  timeAsString = time.toString();
else
  timeAsString = null;  // or empty string, or any other placeholder value you want

附:看起来您正在执行 SQL 查询。我不会称那些“RPC 调用”。

【讨论】:

    【解决方案2】:

    你只需要检查它是否为空。如果以后要使用这个查询结果,最好把逻辑放到Object中。此外,在这种情况下,如果将来对您的数据库进行一些更改,您只需要更改构造函数即可。

    public BreakRegistered(ResultSet resultSet) {
        this.time = resultSet.getTimestamp("time") != null ? resultSet.getTimestamp("time").toString() : null;
        this.checkedOut = resultSet.getTimestamp("checkedOut") != null ? resultSet.getTimestamp("checkedOut").toString() : null;
        this.navn = resultSet.getString("navn");
        this.medarbejderID = resultSet.getInt("medarbejderID")
    }
    

    【讨论】:

      猜你喜欢
      • 2014-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-28
      • 2019-06-06
      • 1970-01-01
      相关资源
      最近更新 更多