如何在没有此“ java.sql.SQLException:无法将值'0000-00-00'表示为java.sql.Date”的情况下从数据库转换获取日期并显示

时间:2019-06-06 20:09:21

标签: mysql jsp

我正在尝试在weppage上显示插入数据库的详细信息

我尝试将日期转换为sql日期

public static List<Detail> getAllRecords(){
    List<Detail> list = new ArrayList<Detail>();

    try{
        Connection con = getConnection();
        PreparedStatement ps = con.prepareStatement("select * from studentDetails");
        ResultSet rs = ps.executeQuery();
        while(rs.next()){
            Detail u = new Detail();
                        java.sql.Date dbSqlDate = rs.getDate("dob"); 

                        u.setPassword(rs.getInt("password"));  
                        u.setName(rs.getString("name"));  
                        u.setLastname(rs.getString("lastname"));  
                        u.setUsername(rs.getString("username"));  
                        u.setEmail(rs.getString("email"));  
                        u.setAddress(rs.getString("address"));
                        System.out.println("dbSqlDate=" + dbSqlDate);
                        u.setAge(rs.getInt("age")); 
                        list.add(u);
        }
    }catch(Exception e){System.out.println(e);}
    return list;
}

我希望输出为02/03/2000,但不起作用

1 个答案:

答案 0 :(得分:1)

Quickfix是在建立连接时将 ?zeroDateTimeBehavior=convertToNull 添加到MySQL JDBC URL。


更长的答案的开始会指出...

默认情况下,MySQL允许将特殊的“零”日期值存储在DATE / DATETIME列中。检索时,这些值是格式为'0000-00-00'的字符串。通过JDBC拉入Java时,Java不允许java.util.Date值具有该值。

某些sql_mode设置可以禁止MySQL的“零”日期行为。我们可能还想确保该列允许使用NULL值(即,如果该列未定义为NOT NULL),和/或修改该列的定义以提供非零的默认值...

该列中已经存在的“零”日期值可以替换为NULL值,例如:

UPDATE `studentDetails` SET dob = NULL WHERE dob = '0000-00-00'

zeroDateTimeBehavior记录在这里:

https://dev.mysql.com/doc/connector-j/5.1/en/connector-j-reference-configuration-properties.html

此处记录了MySQL DATE行为

https://dev.mysql.com/doc/refman/8.0/en/date-and-time-types.html

节选:

  

MySQL允许您将'0000-00-00'的“零”值存储为“虚拟日期”。在某些情况下,这比使用NULL值更方便,并且使用较少的数据和索引空间。要禁止'0000-00-00',请启用NO_ZERO_DATE模式。