使用Java从Oracle读取时间戳列.. rs.getString(index)

在使用Java 6从Oracle 10g读取Timestamp列数据时,我读取它如下:

String str = rs.getString(index);

我不想使用rs.getTimestamp() 。 现在,当我对Date列做同样的处理时,我得到一个适当的Date表示。 但有了Timestamp,我得到一个String,如下所示:

2009-5-3 12:36:57. 618000000

我不明白为什么在毫秒之前引入一个空间。 这使得我通过预定义的时间戳格式读取的时间戳不可解析。 任何想法,为什么我会在毫秒之前获得空间?


好吧,这就是我所要做的,对我来说确实是一个可行的解决方案。

ResultSet rs = st.executeQuery("..");
ResultSetMetaData rsmt = rs.getMetaData();
int columnIndex = 0;
while (rs.next()) {
if (rsmt.getColumnType(columnIndex) == 93) { // ts field - ref. -> http://www.devdaily.com/java/edu/pj/jdbc/recipes/ResultSet-ColumnType.shtml
    Timestamp tsTemp = this.getTimestamp(columnIndex);
    return tsTemp.toString(); // this does give the timestamp in correct format
}
columnIndex ++;
}

您正在向一个字符串进行隐式转换,因此格式化由您的数据库会话的NLS_TIMESTAMP_FORMAT设置确定,该设置源自Java语言环境。 尽管这是一种奇怪的格式,所以也许它会以某种方式被覆盖。

由于您经常无法控制这些事情,并且您可能会在破坏代码的环境中发生意外更改,因此在查询中指定格式通常更安全。 如果您确实需要使用getString()来检索它,而不是

select timestamp_field from ...

做类似的事情

select to_char(timestamp_field, 'YYYY-MM-DD HH24:MI:SS.FF3') from ...

或者,您可以更改您的区域设置; 或通过在查询之前执行alter session set nls_timestamp_format = 'YYYY-MM-DD HH24:MI:SS.FF3'会话中的格式,但是您必须在每个会话中执行此操作(或使用登录触发器),并可能在其他地方产生意想不到的影响,特别是在使用连接池时。 以所需格式显式地从数据库中获取数据更加明显,并且如果其他人稍后改变某些内容,则不会中断数据。

链接地址: http://www.djcxy.com/p/36939.html

上一篇: Reading Timestamp column from Oracle using Java.. rs.getString(index)

下一篇: Get Date from a long var char milliseconds value stored in oracle Database