【问题标题】:Calling database accessing method from within another db accessing method从另一个数据库访问方法中调用数据库访问方法
【发布时间】:2016-12-20 10:15:56
【问题描述】:

我是否应该避免从其他数据库访问方法中调用数据库访问方法(即:同时打开多个Connections)?

假设我有一个Object Message 及其相应的方法来从数据库selectMessge() 中检索它。

假设Message 有一个名为user 的字段,其中包含User Object。 我通常将selectMessage 编码为如下所示(其中rsResultSet Object):

...
int userId = rs.getInt("UserId");
message.setUser(User.selectUser(userId));
...

selectUser 是一种数据库访问方法,上面显然是在打开Connection 时发生的)

以上可以吗?或者我应该:

  1. 检索 ID
  2. 关闭连接
  3. 检索用户对象(通过打开和关闭另一个Connection

后者需要更多代码行,因为我需要在 Message Object 中为用户 ID 设置一个单独的字段。

谢谢。

【问题讨论】:

    标签: java mysql database jdbc


    【解决方案1】:

    这取决于您的要求。除非连接用完,否则在一次打开期间建立另一个连接应该不是问题。 虽然如果你使用的是 JPA 或 hibernate,它会有不同的查询处理机制,所以你可能根本不会遇到这种情况。

    恕我直言,这完全可以,只要您的数据库支持足够的连接即可。很多情况下都是这样做的。

    但从代码和性能的角度来看,我看到您还会遇到一些其他问题。

    1. 据我所知,数据库处理和业务处理不是隔离的,这可能会导致紧密耦合,进而导致维护成本增加。
    2. 我看到您在从结果集中读取 userId 后进行查询。所以要么你正在处理一个批次,要么你正在处理单个记录。如果是批量,您可以很好地收集所有用户 ID 并稍后获取记录。这将对性能产生重大影响,如果您只有一条记录,那么最好使用 JOIN 查询,这也将为您节省一次数据库访问,这一点也很重要。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-24
      • 1970-01-01
      • 2013-07-07
      • 1970-01-01
      • 2013-02-09
      • 1970-01-01
      相关资源
      最近更新 更多