【问题标题】:Java ResultSet.getString() for Date field displaying 00:00:00.0显示 00:00:00.0 的日期字段的 Java ResultSet.getString()
【发布时间】:2023-03-24 12:06:01
【问题描述】:

我正在使用通用方法循环并将 ResultSet 转换为 String 数组。我想知道为什么 Oracle db 值中的 Date 列打印为 2015-01-09 00:00:00.0 而数据库中的日期显示为 2015-01-09 ?

这里是代码,Oracle中的col类型是Date

    while(rs.next()) {
        String[] arr = new String[colCount];
        for(int i = 1; i <= colCount; i++) {
            arr[i-1] = rs.getString(i);
        }//end for
        list.add(arr);
    }//end while

所以这是问题的第 1 部分,问题的第 2 部分 - 是我在这里使用通用方法执行 .replace 00:00:00.0 来删除它的最佳选择吗?

【问题讨论】:

  • 如果您访问的是DATE 列,则应改用rs.getDate()。为什么要隐式转换为字符串?

标签: java oracle date jdbc resultset


【解决方案1】:

您不应该在 Date 数据类型上使用 rs.getString()。您应该使用rs.getDate(),然后根据需要解析日期。

例子:

java.sql.Date date = rs.getDate(i);
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
String dateStr = dateFormat.format(date);

或者您可以使用TO_CHAR 函数直接从数据库中以字符串形式直接获取日期,如下所示:

SELECT TO_CHAR(col1, 'yyyy-mm-dd') AS 'MYDATE' FROM TABLE1;

然后将其作为字符串获取:

String dateStr = rs.getString("MYDATE");

希望对你有帮助

【讨论】:

    【解决方案2】:

    Oracle DATE 数据类型同时包含日期和时间。所以这并不奇怪——它是甲骨文。

    我会亲自将日期转换为 java.sql.Date 以删除尾随时间。您可以为此使用ResultSet.getDate() 方法。

    请参阅docs

    【讨论】:

    • 你的意思是java.sql.Date
    • @MickMnemonic 是的,我的意思是 java.sql.Date 虽然这是 java.util.Date 的另一种形式,毕竟 :) 我会编辑以反映。谢谢。
    • 这是我一直在寻找的答案之一(Oracle Date 包含日期和时间)-谢谢!
    猜你喜欢
    • 2016-01-14
    • 1970-01-01
    • 2017-08-11
    • 1970-01-01
    • 2015-02-03
    • 2011-05-07
    • 2011-04-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多