当前位置: 首页 > 面试题库 >

Java从DAO删除重复的尝试,捕获和最终样板

薛兴德
2023-03-14
问题内容

我有一个DAO类,其中包含许多方法,这些方法具有以下重复代码:-

public void method1(...) {
  Connection conn = null;
  try {
      //custom code here
  } catch (SQLException e) {
     LOG.error("Error accessing the database.", e);
     throw new DatabaseException();
  } catch (QueryNotFoundException e) {
     LOG.error("Error accessing the database.", e);
     throw new DatabaseException();
  } finally {
     if (conn != null)
        connectionPool.returnConnection(conn);
  }

public void method2(...) {
  Connection conn = null;
  try {
      //different custom code here
  } catch (SQLException e) {
     LOG.error("Error accessing the database.", e);
     throw new DatabaseException();
  } catch (QueryNotFoundException e) {
     LOG.error("Error accessing the database.", e);
     throw new DatabaseException();
  } finally {
     if (conn != null)
        connectionPool.returnConnection(conn);
  }

我想重组该类,以便将尝试,捕获和最终放置在一个地方以避免重复。我将如何完成?


问题答案:

为ex创建一个接口。可执行文件:

 public interface Executable() {

   void exec() throws SqlException();

 }

将每个dao方法重构为:

public void method1() {
   execute(new Executable() {

     @Override
     public void exec() throws SqlException() {
          // your code here
     }
  });
  }

创建以下方法在您的DAO中执行:

private void execute(Executor ex) {
    try {
      ex.exec();
    } catch(...) {
      ...
    } finally {
       ...
    }
}


 类似资料:
  • 问题内容: 我经常遇到如下情况: 仍然需要尝试-最终在内部捕获块。 克服此问题的最佳实践是什么? 问题答案: 写一个类,其中包含捕获和记录此类异常的方法,然后根据需要使用。 您最终会看到如下内容: 您的客户端代码将类似于: 更新: 自Java 7开始,各种JDBC接口都得到了扩展,而以上代码回答了原始问题,如果您直接针对JDBC API编写代码,则现在可以对其进行结构化:

  • 问题内容: 我有一个需要类似以下内容的场景 在我的尝试,我会,数据,将其与基于处理其他数据集。 在随后。有可能阻止吗?下面是伪代码: 问题答案: 无需创建表,您只需声明一个表变量(查询结束时该变量将自动消失)。

  • 鉴于: 我想尝试,并重试,连接到服务器3次才放弃。 我可以把整个try/catch放在一个循环中,但是这是否符合Java的“最佳实践”。从我对该主题的回忆来看,这将是对语句的误用。再说一次,我可能完全错了。你怎么认为?

  • 在 中,尝试捕获最终阻止的工作原理是什么? 所以如果有例外,我知道它会跳到捕获块,然后跳到最后的块。 但是如果没有错误,catch块不会运行,但是finally块会运行吗?

  • 我正在使用下面的Java(Spring 2.0)代码从Web服务读取响应: 但是,如果myUrl Web服务返回HttpStatus。错误的_请求(400),未将其分配给myResponse并引发错误,因此没有ResponseBy,我需要将请求包装在try-catch块中。这是正确的还是有办法解决这个问题?此外,这是否意味着myUrl Web服务永远不应该故意(通过编程)将myResponseOb

  • 问题内容: 在进行学校项目时,我编写了以下代码: 问题在于Netbeans告诉我这些行抛出一个,因此必须被捕获或声明。它还抱怨并且可能尚未初始化(尽管检查为空)。 似乎整个问题都在此停了下来,这似乎有些奇怪。 我的下意识解决方法是这样做: 但是,这深深地困扰着我,让我感到肮脏。 我来自C#背景,我只是在这里利用块,因此我不确定处理此问题的“正确”方法是什么。 解决这个问题的正确方法 是 什么? 问