19
回答
oracle里的date类型时间拿不出怎么办
滴滴云服务器,限时包月0.9元,为开发者而生>>>   

用DbUtils拿不出oracle的date里的时间怎么办,现在好像只能拿到日期.

请别告诉我说把数据库里的date类型改成timstamp,那是不可能的,数据库内容不能乱改的

举报
ytx
发帖于8年前 19回/2K+阅
共有19个答案 最后回答: 4年前

你是怎么拿的?把代码贴出来看看

一般你可以直接用 java.util.Date 这个类来对应数据库中的日期、日期时间类型的字段。

代码:

 public static void test_find() throws SQLException {        
         //创建连接
         Connection conn = ConnTools.getConnection();
         //创建SQL执行工具
         QueryRunner qRunner = new QueryRunner();
         //执行SQL查询,并获取结果
         String sql = "select id,create_date from table_test where rownum<=10";
         List<Map<String,Object>> list = (List<Map<String,Object>>) qRunner.query(conn, sql, new MapListHandler());
         //输出查询结果
         for (Map map : list) {
          BigDecimal id = (BigDecimal)map.get("id");
          java.util.Date create_date = (java.util.Date)map.get("create_date");
                 System.out.println(id+":"+create_date.toLocaleString());
         }
         //关闭数据库连接
         DbUtils.closeQuietly(conn);

结果:

1005:2010-2-27 0:00:00
1006:2010-2-27 0:00:00
1007:2010-2-27 0:00:00
1008:2010-2-27 0:00:00
1009:2010-2-27 0:00:00
1010:2010-2-27 0:00:00
1011:2010-2-27 0:00:00
1012:2010-2-27 0:00:00
1013:2010-2-27 0:00:00
1014:2010-2-27 0:00:00

你可以试试打印出日期对象的类型来看看

System.out.println(id+":"+create_date + ":" + create_date.getClass().getName());

如果是 java.sql.Date 的话,那就是数据库的 Date 字段的问题了。

Oracle 的 JDBC 驱动自动映射为 java.sql.Date 类型,这个类型也就只有日期了。

结果:

1005:2010-02-27:java.sql.Date
1006:2010-02-27:java.sql.Date
1007:2010-02-27:java.sql.Date
1008:2010-02-27:java.sql.Date
1009:2010-02-27:java.sql.Date
1010:2010-02-27:java.sql.Date
1011:2010-02-27:java.sql.Date
1012:2010-02-27:java.sql.Date
1013:2010-02-27:java.sql.Date
1014:2010-02-27:java.sql.Date

但数据库是有数据的:

----------------------------------------

1 1001 2010-02-26 17:30:20
2 1002 2010-02-27 09:22:49
3 1003 2010-02-27 09:34:50
4 1004 2010-02-27 09:41:16
5 1005 2010-02-27 10:21:19
6 1006 2010-02-27 11:12:57
7 1007 2010-02-27 14:28:02
8 1008 2010-02-27 14:43:34
9 1009 2010-02-27 14:47:53
10 1010 2010-02-27 14:51:07
11 1011 2010-02-27 14:52:51
12 1012 2010-02-27 15:06:10
13 1013 2010-02-27 15:07:47
14 1014 2010-02-27 15:08:28
15 1015 2010-02-27 15:11:15
16 1016 2010-02-27 15:11:57
17 1017 2010-02-27 15:13:27
18 1018 2010-02-27 15:17:31
19 1019 2010-02-27 15:26:03

你可以用纯JDBC的方式,通过 getTimestamp 方法获取出字段值,看看是否包含时间

有的话,那就改造一下 DbUtils
没有的话,问题就在数据库上了

用jdbc就可以

代码:

  public static void test_find2() throws SQLException {        
         //创建连接
         Connection conn = ConnTools.getConnection();
         ResultSet rs = null;
         //创建SQL执行工具
         String sql = "select id,create_date from table_test where rownum<=10";
         Statement stmt = conn.createStatement();
         rs = stmt.executeQuery(sql);
         while(rs.next()){
          int id = rs.getInt("id");
          Timestamp create_date = rs.getTimestamp("create_date");
          System.out.println(id+":"+create_date + ":" + create_date.getClass().getName());
         }
        
         //关闭数据库连接
         DbUtils.closeQuietly(conn);
 }

结果:

1005:2010-02-27 10:21:19.0:java.sql.Timestamp
1006:2010-02-27 11:12:57.0:java.sql.Timestamp
1007:2010-02-27 14:28:02.0:java.sql.Timestamp
1008:2010-02-27 14:43:34.0:java.sql.Timestamp
1009:2010-02-27 14:47:53.0:java.sql.Timestamp
1010:2010-02-27 14:51:07.0:java.sql.Timestamp
1011:2010-02-27 14:52:51.0:java.sql.Timestamp
1012:2010-02-27 15:06:10.0:java.sql.Timestamp
1013:2010-02-27 15:07:47.0:java.sql.Timestamp
1014:2010-02-27 15:08:28.0:java.sql.Timestamp

引用来自#8楼“ytx”的帖子

改造一下 DbUtils?

这对我来说难度太大

你可以不用改造,自建一个对象,然后用 ColumnListHandler 这个类来读取结果

public class Obj {
    private long id;
    private Timestamp create_date;
    //getters 
    //setters
}

顶部