日期转换问题

日期转换问题

直接在

pstmt.setDate();

这里面传入Java.util.date不可以吗?不是说两者是可以通用的吗?


emp.setHiredate(hiredate);

这里不就可以直接转换吗? hiredate 是子类, emp.hiredate是父类, 因为存在继承,所以可以通用。 

那为什么在insert中就不可以了呢?

问题2:

http://img1.sycdn.imooc.com//climg/607d2fda0930197714460512.jpg

为什么转换成了1992-01-30啊 

package com.imooc.jdbc.hrapp.command;

import com.imooc.jdbc.common.JdbcUtils;

import javax.sound.midi.Soundbank;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;

//4-2实现JDBC新增
public class InsertCommand implements Command{

/**
* 新增员工数据
*/
@Override
public void execute() {
//用来接收用户员工的输入
Scanner in=new Scanner(System.in);
System.out.println("请输入员工编号:");
Integer eno=in.nextInt();
System.out.println("请输入员工姓名:");
String name=in.next();
System.out.println("请输入员工薪资:");
Float price=in.nextFloat();
System.out.println("请输入隶属部门:");
String dname=in.next();
System.out.println("请输入入职日期:");
String strHiredate=in.next();
//1、将字符串转换成java.util.date;
//对字符串日期格式化
java.util.Date udHiredate=null; //util .date
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-HH-dd");
//对字符串解析
try {
udHiredate= sdf.parse(strHiredate);
} catch (ParseException e) {
e.printStackTrace();
}
//2、将java.util.date转换成java.sql.date
long time=udHiredate.getTime(); //获取自1970年到现在的毫秒数
//将毫秒数转化成java.sql.date
java.sql.Date sdHiredate=new java.sql.Date(time);
Connection conn=null;
PreparedStatement pstmt=null;
try {
//1、使用封装类,JdbcUtils获取对JDBC驱动的加载和创建数据库连接;
conn =JdbcUtils.getConnection();
//2、创建preparedStatement对象,防止sql注入攻击;
String sql="insert into employee(eno,ename,salary,dname,hiredate) values (?,?,?,?,?)";
pstmt =conn.prepareStatement(sql);
//对参数进行赋值;
pstmt.setInt(1, eno);
pstmt.setString(2, name);
pstmt.setFloat(3, price);
pstmt.setString(4,dname);
pstmt.setDate(5,sdHiredate);
//执行更新;
int cnt= pstmt.executeUpdate();
System.out.println("cnt:"+cnt);
System.out.println("员工入职手续已办理");
} catch (Exception e) {
e.printStackTrace();
}finally {
//3、对连接关闭,释放资源;
JdbcUtils.closeConnection(null,pstmt,conn);
}

}
}


正在回答 回答被采纳积分+1

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

1回答
好帮手慕小尤 2021-04-19 17:02:32

同学你好,1、是的,是可以的,在数据提取的时候,可以用java.sql.date替换java.util.date。

2、同学代码存在问题,是应该是年月日(yyyy-MM-dd)进行转换,而不是年时日进行转换(yyyy-HH-dd),建议同学进行修改,然后重新测试试一下。
http://img1.sycdn.imooc.com//climg/607d471209294b8905830171.jpg

祝学习愉快!


  • 提问者 rock221 #1

    为什么在写入的时候不能直接传入 java.util.date 呢? 多态之间不是可以互相转型的吗。 

    2021-04-19 17:05:12
  • 好帮手慕小尤 回复 提问者 rock221 #2

    同学你好,1、同学描述的是否是在写入时,直接添加util.date,如果是,则是无法直接通用的,因setDate()方法的参数是sql.Date 类型,如下图所示:则子类类型的参数是无法接收父类类型的参数,所以无法直接进行传入。

    http://img1.sycdn.imooc.com//climg/607d58fc0904be1e05750387.jpg

    2、

    同学可以了解一下util.Date和sql.Date的区别:

        java.util.Date 就是在除了SQL语句的情况下面使用。

        java.util.Date 是 java.sql.Date 的父类。

        java.util.Date 表示常用的时间类,通常在格式化或者得到当前时间使用。

        java.sql.Date 是针对SQL语句使用的,它只包含日期而没有时间部分。

        java.sql.Date 通常在读写数据库的时候使用。

    祝学习愉快!

    2021-04-19 19:01:02
  • 提问者 rock221 回复 好帮手慕小尤 #3

    读取可以使用,是因为父类可以接收子类,写入不可以是因为子类不能接受父类,对吧

    2021-04-19 19:03:33
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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