(java笔记)ClassCastException: java.util.Date cannot be cast to java.sql.Date

目的

根据oracle数据库中的一个日期字段,利用Java代码自动更新数据库中的数据。

难点

数据库中的数据字段为

LEASEDAY | DATE类型

在java这边的条件为字符串日期

yyyy-mm-dd | String类型

由于存在这样的类型的差异,就会碰到一些这样的问题:

ClassCastException: java.util.Date cannot be cast to java.sql.Date

解决办法

先上代码

    /**
     * 单个方法,作用,根据输入的day:yyyy-mm-dd格式的字符日期,将数据库中的该天所有数据更新为0
     * 0表示假期
     * @param day
     * @throws SQLException 
     * @throws ParseException 
     */
    public void UpdateDayTypeByLeaseDay(String day) throws SQLException, ParseException{
        //UPDATE NYC_TRIP_SUM_BYHOUR SET daytype='0' where leaseday='2016-12-31'
        String sql="UPDATE NYC_TRIP_SUM_BYHOUR SET daytype='0' where leaseday=?";
        //建立连接
        Connection conn=daoUtil.getConnection();
        PreparedStatement preStmt=conn.prepareStatement(sql);

//      SimpleDateFormat sdfDay=new SimpleDateFormat("yyyy-MM-dd");//小写的mm表示的是分钟

        //先将字符日期转为util日期
        SimpleDateFormat df = new SimpleDateFormat("yyyy-mm-dd");
        Date dayDateUtil=df.parse(day);
        System.out.println("转换成Util日期"+dayDateUtil);
        //由于util在sql中不符,再转为sql日期
        java.sql.Date dayDateSql = new java.sql.Date(dayDateUtil.getTime());
        System.out.println("转换成sql日期"+dayDateSql);

        //将日期参数传入
        preStmt.setDate(1, dayDateSql);
        preStmt.executeQuery();
        //关闭连接资源
        preStmt.close();
        conn.close();

    }

关键在于中间的几行:

//先将字符日期转为util日期
SimpleDateFormat df = new SimpleDateFormat("yyyy-mm-dd");
Date dayDateUtil=df.parse(day);
System.out.println("转换成Util日期"+dayDateUtil);

//由于util在sql中不符,再转为sql日期
java.sql.Date dayDateSql = new java.sql.Date(dayDateUtil.getTime());
System.out.println("转换成sql日期"+dayDateSql);

为什么会这样呢:

oracle默认的系统时间就是sysdate函数,储存的数据形如25-3-200510:55:33
java 中取时间的对象是java.util.Date。
oracle中对应的时间对象是java.util.Date,java.sql.Time,java.sql.Timestamp、它们都是是java.util.Date的子类。
oracle中与date操作关系最大的就是两个转换函数:to_date(),to_char()。to_date()一般用于写入日期到数据库时用到的函数。to_char()一般用于从数据库读入日期时用到的函数。
所以可以看到我们问题就解决了,先将String 格式转为date (java.util)
在获取time也就是相对1900的时间差 秒,再将秒,转为sql.date类型

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值