ResultSet:按索引检索列值与按标签检索

新手上路,请多包涵

在使用 JDBC 时,我经常遇到像这样的结构

ResultSet rs = ps.executeQuery();
while (rs.next()) {
    int id = rs.getInt(1);
    // Some other actions
}

我问自己(以及代码作者)为什么不使用标签来检索列值:

 int id = rs.getInt("CUSTOMER_ID");

我听到的最好的解释是关于性能的。但实际上,它是否使处理速度非常快?我不这么认为,尽管我从未进行过测量。在我看来,即使按标签检索会有点慢,但它提供了更好的可读性和灵活性。

那么有人可以给我很好的解释,避免通过列索引而不是列标签检索列值吗?两种方法的优缺点是什么(也许,关于某些 DBMS)?

原文由 Rorick 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 478
2 个回答

默认情况下,您应该使用字符串标签。

优点:

  • 列序独立
  • 更好的可读性/可维护性

缺点:

  • 您无法控制列名(通过存储过程访问)

你更喜欢哪个?

整数?

 int i = 1;
customerId = resultSet.getInt(i++);
customerName = resultSet.getString(i++);
customerAddress = resultSet.getString(i++);

或字符串?

 customerId = resultSet.getInt("customer_id");
customerName = resultSet.getString("customer_name");
customerAddress = resultSet.getString("customer_address");

如果在位置 1 处插入了一个新列怎么办?您更喜欢哪个代码?或者,如果列的顺序发生变化,您需要更改哪个代码版本?

这就是为什么你应该 默认使用字符串标签。

原文由 Martin Klinke 发布,翻译遵循 CC BY-SA 4.0 许可协议

警告:我要在这里夸夸其谈,因为这让我发疯。

99%* 的时间,这是一个荒谬的微观优化,人们有一些模糊的想法让事情变得“更好”。这完全忽略了一个事实,除非您 始终处于 对数百万 SQL 结果的极其紧凑和繁忙的循环中(希望这种情况很少见),否则您永远不会注意到它。对于没有这样做的每个人来说,维护、更新和修复列索引中的错误的开发人员时间成本远远大于性能极差的应用程序的硬件增量成本。

不要在代码中编写这样的优化代码。为维护它的人编写代码。然后观察、测量、分析和优化。再观察,再测量,再分析,再优化。

优化几乎是开发的最后一步,而不是第一步。

\* 图为虚构。

原文由 Cowan 发布,翻译遵循 CC BY-SA 2.5 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题