Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ClassCastException:java.util.Date不能强制转换为java.sql.Date_Java_Sql - Fatal编程技术网

ClassCastException:java.util.Date不能强制转换为java.sql.Date

ClassCastException:java.util.Date不能强制转换为java.sql.Date,java,sql,Java,Sql,您好,我的代码正在抛出ClassCastException。 StackTrace显示: java.lang.ClassCastException: java.util.Date cannot be cast to java.sql.Date at com.affiliate.DAO.AffiliateDAO.insertAffiliate(AffiliateDAO.java:48) ie@ps.setDate(6,(Date)affiliate.getDate()) 下面是我的ser

您好,我的代码正在抛出
ClassCastException
。 StackTrace显示:

java.lang.ClassCastException: java.util.Date cannot be cast to java.sql.Date
    at com.affiliate.DAO.AffiliateDAO.insertAffiliate(AffiliateDAO.java:48)
ie@ps.setDate(6,(Date)affiliate.getDate())

下面是我的servlet:

   protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    Affiliate af= new Affiliate();

    af.setFisrtName(request.getParameter("txtFname"));
    af.setLastName(request.getParameter("txtLname"));
    af.setGender(request.getParameter("txtGender"));
    af.setCategory(request.getParameter("txtCategory"));
    String dob=(request.getParameter("txtDob"));
    SimpleDateFormat formatter = new SimpleDateFormat("MM/dd/yyyy");  
    Date date;
    try {
        date = (Date)formatter.parse(dob);
        af.setDate(date);
    } catch (ParseException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    af.setAge(Integer.parseInt(request.getParameter("txtAge")));
    af.setAddress(request.getParameter("txtAddr"));
    af.setCountry("India");
    af.setState(request.getParameter("txtState"));
    af.setCity(request.getParameter("txtCity"));
    af.setPinCode(Integer.parseInt(request.getParameter("txtPin")));
    af.setEmailId(request.getParameter("txtEmail"));
    af.setStd(Integer.parseInt(request.getParameter("txtStd")));
    af.setContactNo(Integer.parseInt(request.getParameter("txtPhone")));
    af.setMobileNo(Long.parseLong(request.getParameter("txtMobile"),10));

AffiliateService afs=new AffiliateService();
**afs.createAffiliate(af);**
}
下面是我的刀:

public void insertAffiliate(Affiliate affiliate){
    String sql="INSERT INTO REGISTER " +"(id,FisrtName,LastName,Gender,Category,DateOfBirth,Age,Address,Country,State,City,PinCode,EmailId,Std,ContactNo,MobileNo)VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
    Connection conn = null;

    try {
        **conn = dataSource.createConnection();**
        PreparedStatement ps = conn.prepareStatement(sql);
        ps.setInt(1, affiliate.getId());
        ps.setString(2, affiliate.getFisrtName());
        ps.setString(3, affiliate.getLastName());
        ps.setString(4,affiliate.getGender());
        ps.setString(5, affiliate.getCategory());
        ***ps.setDate(6, (Date) affiliate.getDate());***
        ps.setInt(7, affiliate.getAge());
        ps.setString(8, affiliate.getAddress());
        ps.setString(9,affiliate.getCountry());
        ps.setString(10,affiliate.getState());
        ps.setString(11, affiliate.getCity());
        ps.setInt(12, affiliate.getPinCode());
        ps.setString(13, affiliate.getEmailId());
        ps.setInt(14,affiliate.getStd());
        ps.setInt(15, affiliate.getContactNo());
        ps.setLong(16, affiliate.getMobileNo());

        ps.executeUpdate();
        ps.close();

    } catch (SQLException e) {
        throw new RuntimeException(e);

    } finally {
        if (conn != null) {
            try {
                conn.close();
            } catch (SQLException e) {}
        }
    }
}
以下是我的DTO:

public class Affiliate {

@NotNull
    @Past
    Date date;

public Date getDate() {
        return date;
    }
    public void setDate(Date date) {
        this.date = date;
    }

请在这方面帮助我

在servlet中使用
导入java.sql.Date
而不是
导入java.util.Date

您不能将util Date插入sql Date

java.util.Date utilDate = affiliate.getDate();
java.sql.Date sqlDate = new java.sql.Date(utilDate.getTime());
现在,您可以插入
sqlDate
作为

ps.setDate(6, sqlDate);
比如说,
PreparedStatement
setDate()
中的
Date
参数采用
java.sql.Date
类型的日期对象。但是您似乎在您的
Affiliate
类中使用了
java.util.Date
对象

这就是为什么您会得到
ClassCastException:java.util.Date不能转换为java.sql.Date

要解决此问题,您需要将
附属机构
类中的
Date
对象的类型更改为
java.sql.Date
,或者执行此操作

ps.setDate(6, new java.sql.Date(affiliate.getDate().getTime()));

java.sql.Date
java.util.Date
的子类,而不是相反

  • java.sql.Date
    可以强制转换为
    java.util.Date
  • java.util.Date
    无法转换为
    java.sql.Date
然而,大多数位于JDBC之上的API,如Spring或Hibernate,都接受
java.util.Date
。因此,几乎所有情况下,除非您确实需要
java.sql.Date
,否则最好导入
java.util.Date

如果直接使用JDBC,那么例如
java.sql.PreparedStatement
方法只接受
java.sql.Date
,因此您必须自己构造它


java.sql.ResultSet
方法也返回
java.sql.Date
,但它们可以直接用作
java.util.Date
,无需进一步操作。

new java.sql.Date(Date.getTime())
为了详细说明@Marko的建议,a
java.sql.Date
是一个
java.util.Date
,它扩展了它。反之则不然;您需要从
java.util.Date
创建
java.sql.Date
,而不仅仅是发布代码,尝试提供解释和推理。嘿,谢谢你的工作,但在数据库中,它被存储为yyyy/MM/dd,而在SimpleData格式中,我已将其转换为MM/dd/yyyy。那么,如何以MM/dd格式在数据库中获取日期呢/yyyy@user3222718-如果将其存储为
日期
,则其取决于数据库。如果将其存储为字符串,则可以使用
SimpleDataFormat
将其格式化为所需格式,然后将其存储。'String dob=(request.getParameter(“txtDob”);SimpleDataFormat格式化程序=新的SimpleDataFormat(“MM/dd/yyyy”);日期;请尝试{date=(date)formatter.parse(dob);af.setDate(date);}catch(ParseException e){//TODO自动生成的catch块e.printStackTrace();}'这是我在问题中发布的servlet中所做的。。。。请检查并帮助我,我想在fromat MM/dd中输入db日期/yyyy@user3222718-我说你把这个作为一个新问题发布。另外,如果您直接将其存储为
日期
,则可能需要DB配置以您想要的格式存储它。但是DB格式应该是无关的,因为无论何时从DB取回它,都会得到
Date
对象,它没有自己的格式。您可以对其使用SDF,并将其格式化为您想要的任何类型。@user322718数据库中存储的日期很可能存储为从纪元开始的毫秒,就像Java中的日期一样。
字符串
表示法就是这样一种表示法。当您使用
SimpleDataFormat
解析
字符串时,您正在将其解析为
日期。为了在数据库中查看日期,数据库还创建了一个字符串表示形式,以使其具有可读性。根据您的数据库,这很容易格式化