【发布时间】:2015-01-07 10:31:04
【问题描述】:
我说的是这个接口方法:
最常用的实现是cachedrowset中的那个:
你会注意到这个实现做了两件很奇怪的事情:
1) 它修改作为参数传递的日历,即使还有一个返回值
2) 它从 SQL 中提取所有时间信息,毫秒除外,它来自作为参数传递的日历。
接口描述不太清楚,但假设实现是正确的 - 这个方法有什么意义?我可以理解一种方法,它需要一个日历来提取时区,而不需要修改它。但是拿一个日历,修改它,不仅提取区域,还提取毫秒......
是否有人对此 API 背后的历史/设计/推理有任何见解?
【问题讨论】:
-
在我看来,实现此
CachedRowSet的人不了解 JDBC API(在RowSet的参考实现中对 JDBC 有更多的误解)。据我所知,日历应仅用于其时区信息,但 API 确实说“用于构造时间戳的 java.util.Calendar 对象” -
@MarkRotteveel - 是的,我就是这么想的 - 我想知道实施者是否被“为时间戳构造适当的毫秒值”这句话所欺骗 - 所以他们实际上是在毫秒内复制的... 可怕的是,这种实现永远无法“修复”——它会破坏人们一直在使用的解决方法。
标签: java jdbc resultset cachedrowset