【问题标题】:How can i get whole date and time data when using cachedrowset from Oracle date field使用 Oracle 日期字段中的 cachedrowset 时如何获取整个日期和时间数据
【发布时间】:2012-11-11 07:31:22
【问题描述】:

我从 oracle 获取带有结果集的数据,然后将它们填充到 cachedrowset。但是当我在数据库中获取一个日期字段并打印它时,它只打印日期。我检查了api,知道getDate()方法返回java.sql.date,并且sql.date的时间被强制转换为0。我测试如果我调用resultset.getString("datefield"),它可以获得完整的日期和时间数据,所以有吗使用cahcedrowset 获取完整日期和时间数据的任何方式,谢谢

这是我的源代码

    CachedRowSet rs = null;
    try {
    rs = executeQuery("select * from t_web_order_result ");
    if (rs != null && rs.next()) {
            KKLog.info(rs.getDate("stime"));//2012-04-24,it should be 2012-04-24 09:23:33
        KKLog.info(rs.getString("stime"));
    }
    } catch (SQLException e) {
        logErr("queryCheckers Err", e);
    } finally {
        closeCachedRowset(rs);
    }

executeQuery 方法

    CachedRowSet rowset = null;
    Connection connection = null;
    PreparedStatement statement = null;
    ResultSet rs = null;
    try {
        connection = getConnection();
        statement = connection.prepareStatement(sql);
        for (int i = 0; i < params.length; i ++) {
            statement.setObject(i + 1, params[i]);
        }
        rs = statement.executeQuery();
        rowset = new CachedRowSetImpl();
        rowset.populate(rs);
        rs.close();
        statement.close();
    } finally {
         //close....            
    }
    return rowset;

我用了三种方法打印日志

    KKLog.info(rs.getDate("stime"));
    KKLog.info(rs.getString("stime"));
    KKLog.info(rs.getTimestamp("stime"));

而日志内容是

    12-11-11 17:06:11 2012-04-24 
    12-11-11 17:06:11 2012-04-24 
    12-11-11 17:06:11 2012-04-24 00:00:00.0 

【问题讨论】:

    标签: java oracle jdbc timestamp cachedrowset


    【解决方案1】:

    如果你想从数据库中获取日期和时间,你必须使用

    KKLog.info(rs.getTimestamp("stime"))
    

    如果日期和时间存储为 date 数据类型或 timestamp ,这将提供表格中的日期和时间。 另请注意,您必须使用java.sql.Date 而不是java.util.Date

    更新 1

    如果使用 cachedrowset,则有一些 bugs 与从数据库中获取时间部分相关联。

    我尝试使用 CachedRowSet 并且缺少时间部分。为了解决此问题,请在数据库连接部分添加以下内容。我也可以看到时间部分。

        java.util.Properties prop = new java.util.Properties();
        prop.put("oracle.jdbc.V8Compatible", "true"); 
        prop.put("user", "user");
        prop.put("password", "password");
       Connection conn = 
      DriverManager.getConnection("jdbc:oracle:thin:@server:port:SID",prop);    
    

    添加 prop.put("oracle.jdbc.V8Compatible", "true");是解决这个问题的关键。

    我之前的日期和时间

    2012-11-08 00:00:00
    

    添加V8Compatible

    2012-11-08 13:28:35
    

    希望对你有帮助

    【讨论】:

    • 谢谢,我就是这样用的,但打印出来的是 2012-04-24 00:00:00.0
    • @Jadic 顺便问一下你用的是哪个驱动程序?
    • oracle.jdbc.OracleDriver,我用的是ojdbc14.jar
    • @Jadic 我已经更新了我的答案,请看看,希望这能解决问题。
    • @Jadic 很高兴它有帮助,欢迎您。接受并投票:-)
    猜你喜欢
    • 2012-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-19
    • 1970-01-01
    相关资源
    最近更新 更多