老师为什么我这里显示的时分秒不正确?跟数据库的时间不一样

老师为什么我这里显示的时分秒不正确?跟数据库的时间不一样

@Test
// 6、按创建时间倒序排序显示所有数据
public void demo6() {
    Connection conn = null;
    PreparedStatement pstmt = null;
    ResultSet rs = null;
    SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    try {
        //获得连接
        conn = JDBCUtils.getConnection();
        //编写SQL语句
        String selectSql = "SELECT * FROM course ORDER BY createTime DESC";
        //预编译SQL
        pstmt = conn.prepareStatement(selectSql);
        //执行SQL
        rs = pstmt.executeQuery();
        while (rs.next()) {
            int id = rs.getInt("id");
            String name = rs.getString("name");
            String category = rs.getString("category");
            String desp = rs.getString("desp");
            Date createTime = rs.getDate("createTime");
            System.out.println(id + " " + name + " " + category + " " + desp + " " + sdf.format(createTime));
        }


    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        JDBCUtils.release(rs, pstmt, conn);
    }
}

http://img1.sycdn.imooc.com//climg/5cde55fa0001694207110220.jpg

http://img1.sycdn.imooc.com//climg/5cde56020001d4b408920328.jpg

正在回答

登陆购买课程后可参与讨论,去登陆

7回答

同学你好,

1、TIMESTAMP与DATETIME的区别

DATETIME的默认值为null;TIMESTAMP的字段默认值为当前时间。

DATETIME使用8字节的存储空间,TIMESTAMP的存储空间为4字节。

两者所能存储的时间范围不一样 

TIMESTAMP所能存储的时间范围为:’1970-01-01 00:00:01.000000’ 到 ‘2038-01-19 03:14:07.999999';

DATETIME所能存储的时间范围为:’1000-01-01 00:00:00.000000’ 到 ‘9999-12-31 23:59:59.999999’。

2、很抱歉老师没有看清同学学习的进度哦,老师所说的XML文件在这里还没有涉及到,之后的课程中有详细讲解。

如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~

  • MasonM 提问者 #1
    好的,非常感谢你老师!
    2019-05-17 20:13:03
吃吃吃鱼的猫 2019-05-17 18:18:22

同学你好,

1、DATETIME和Timestamp,都可用来表示YYYY-MM-DD HH:MM:SS类型的日期。在获取时,程序可看做是类型一致的,所以能获取到哦~

2、在插入数据的时候,可以使用NOW()函数,这样做没有错哦~

如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~

  • 提问者 MasonM #1
    老师,那请问DATETIME和Timestamp在MySQL中的区别是什么呢? 还有你上一个回答中说的.XML文件时什么呀?
    2019-05-17 18:21:43
提问者 MasonM 2019-05-17 15:27:50

老师我后来查到了,我百度了一下,发现如下解答

http://img1.sycdn.imooc.com//climg/5cde611f0001e15212550296.jpg

然后我试了一下,把从结果集从获取时间的方法改成了getTimestamp("createTime");

@Test
// 6、按创建时间倒序排序显示所有数据
public void demo6() {
    Connection conn = null;
    PreparedStatement pstmt = null;
    ResultSet rs = null;

    try {
        //获得连接
        conn = JDBCUtils.getConnection();
        //编写SQL语句
        String selectSql = "SELECT * FROM course ORDER BY createTime DESC";
        //预编译SQL
        pstmt = conn.prepareStatement(selectSql);
        //执行SQL
        rs = pstmt.executeQuery();
        while (rs.next()) {
            int id = rs.getInt("id");
            String name = rs.getString("name");
            String category = rs.getString("category");
            String desp = rs.getString("desp");
            Date createTime = rs.getTimestamp("createTime");
            System.out.println(id + " " + name + " " + category + " " + desp + " " + createTime);
        }


    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        JDBCUtils.release(rs, pstmt, conn);
    }
}

成功获取到了时分秒

http://img1.sycdn.imooc.com//climg/5cde61890001725808670326.jpg


但我有如下疑问:

1:我在定义course表的时候,createTime是DATETIME类型的,然后我在JAVA代码获取createTime的值的时候,是使用resultSet的getTimestamp()方法的,Timestamp和DATETIME这两个类型不是不一样吗?为啥还是能获取到呢?

2:我在插入数据的时候,对DATETIME那个字段,我直接使用数据库中的SQL时间函数NOW()

http://img1.sycdn.imooc.com//climg/5cde626e0001d5b516050741.jpg

这样做好吗?

吃吃吃鱼的猫 2019-05-17 15:19:23

同学你好,对应的.XML文件的时间类型是什么呢?

如果是Date类型的话,改为TIMESTAMP类型呢。

改好之后,再重新启动~

如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~

  • 提问者 MasonM #1
    老师你好,你说的.XML文件是什么东西?
    2019-05-17 15:28:29
提问者 MasonM 2019-05-17 15:16:13

这是我插入数据的代码

Test
//1、首先将表格中的三条数据添加到数据库

public void demo1() {
    Connection conn = null;
    PreparedStatement pstmt = null;

    try {
        //获得连接
        conn = JDBCUtils.getConnection();
        //编写SQL语句
        String sql = "INSERT course VALUES(NULL,?,?,?,NOW()),(NULL,?,?,?,NOW()),(NULL,?,?,?,NOW())";
        //预编译SQL
        pstmt = conn.prepareStatement(sql);
        //设置具体参数
        pstmt.setString(1, "JAVA零基础");
        pstmt.setString(2, "JAVA");
        pstmt.setString(3, "JAVA基础语法");

        pstmt.setString(4, "JAVA Web");
        pstmt.setString(5, "JAVA");
        pstmt.setString(6, "JSP和Servlet");

        pstmt.setString(7, "前端小白 ");
        pstmt.setString(8, "前端");
        pstmt.setString(9, "HTML/CSS/JS");
        //执行SQL
        int i = pstmt.executeUpdate();
        if (i > 0) {
            System.out.println("插入记录成功!");
        } else {
            System.out.println("插入记录失败了!!!");
        }
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        JDBCUtils.release( pstmt, conn);
    }
}

http://img1.sycdn.imooc.com//climg/5cde5faf0001ee6d08090302.jpg

这是course表的详细信息

提问者 MasonM 2019-05-17 15:07:22

http://img1.sycdn.imooc.com//climg/5cde5d6c0001cfa107960410.jpg

@Test
// 6、按创建时间倒序排序显示所有数据
public void demo6() {
    Connection conn = null;
    PreparedStatement pstmt = null;
    ResultSet rs = null;
    SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    try {
        //获得连接
        conn = JDBCUtils.getConnection();
        //编写SQL语句
        String selectSql = "SELECT * FROM course ORDER BY createTime DESC";
        //预编译SQL
        pstmt = conn.prepareStatement(selectSql);
        //执行SQL
        rs = pstmt.executeQuery();
        while (rs.next()) {
            int id = rs.getInt("id");
            String name = rs.getString("name");
            String category = rs.getString("category");
            String desp = rs.getString("desp");
            Date createTime = rs.getDate("createTime");
            System.out.println(id + " " + name + " " + category + " " + desp + " " + sdf.format(createTime));
        }


    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        JDBCUtils.release(rs, pstmt, conn);
    }
}

http://img1.sycdn.imooc.com//climg/5cde5d98000141a409770354.jpg

http://img1.sycdn.imooc.com//climg/5cde5da30001922a07340222.jpg

吃吃吃鱼的猫 2019-05-17 14:58:43

同学你好,检查定义的实体类Course中的有关时间的变量的类型。

是java.util包下的Date,还是java.sql包下的Date。如果是java.sql包下,应该改为java.util包。

因为想要拿到年月日,时分秒,需要用java.util.Date 包下面的Date类型去接收。

java.sql.Date只有年月日。

如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~

  • 提问者 MasonM #1
    老师的确一开始用了java.sql包下的Date,但我改成java.util包下的Date,还是获取不了时分秒的呢?
    2019-05-17 15:06:00
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师