从JDBC ResultSet中将日期作为字符串读取时指定的日期格式在哪里

时间:2014-01-14 00:46:07

标签: java jdbc

这与Default JDBC date format when reading date as a string from ResultSet完全相同,但这个问题实际上从未真正回答过;人们只是提供了编写代码的替代方法。

我特别询问是否有人知道指定默认转换格式的位置,以及是否由某个JDBC规范定义,或者只留下单个JDBC驱动程序。如果是后者,那么另外一个问题是Oracle 10g JDBC如何做到这一点?

**新增15月1日:

抱歉,我认为这个问题非常明确,但显然不是。我不是试图从数据库中检索日期值,也不需要建议如何做到这一点。

我认为这不是引用问题的重复,这就是为什么我在这里问了一个单独的问题。虽然标题几乎相同,但引用的问题(无论OP意图是什么)已经用从数据库中检索日期值的替代方法得到了回答,这不是我想知道的。

干杯,

3 个答案:

答案 0 :(得分:1)

好的,所以跟踪JDBC代码,看起来Oracle驱动程序硬编码自己的格式:

  int k = (((bytes[0 + j] & 255) - 100) * 100 + (bytes[1 + j] & 255)) - 100;
  String s = k + "-" + toStr(bytes[2 + j])
      + "-" + toStr(bytes[3 + j])
      + " " + toStr(bytes[4 + j] - 1)
      + ":" + toStr(bytes[5 + j] - 1)
      + ":" + toStr(bytes[6 + j] - 1)
      + ".0";

因此,我猜测:

  1. 在任何JDBC规范中的任何位置都未指定此行为。
  2. 每个驱动程序库都可以返回它喜欢的任何格式。
  3. 我假设这些是因为不同的实现返回不同的格式。当然,仍然可能在JDBC规范中的某处强制使用此格式,并且某些实现不符合要求,但这似乎不太可能。我当然在JDBC规范中找不到任何对此的引用(但这并不意味着它们不在某处!)。

    然而,就我而言,关键点是格式在库中是硬编码的,并且不能被任何环境或其他设置覆盖,但只要驱动程序库也不会在系统中更改版本保持不变。

答案 1 :(得分:0)

Oracle 10g JDBC是封闭源代码,所以我想我们永远不会知道:)但我敢打赌它首先要求服务器提供区域设置信息,并根据服务器设置调整它将使用的内部数据格式。我的2c。

答案 2 :(得分:0)

我不是100%确定所有数据库的SQL Date类型的实现。但是从Oracle database的javadoc来看,似乎Oracle DB的DATE可以很容易地转换为java.sql.DateMySQLPostgreSQL也是如此:SQL DATE可以转换为java.sql.Date