首页 > 解决方案 > 如果没有此“java.sql.SQLException:值'0000-00-00'不能表示为java.sql.Date”,我如何从数据库转换获取日期并显示

问题描述

我正在尝试在网页上显示插入到我的数据库中的详细信息

我尝试将日期转换为 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 ,但它不起作用

标签: mysqljsp

解决方案


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


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

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

MySQL 的“零”日期行为可能会被sql_mode. 我们可能还希望确保该列允许 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模式。


推荐阅读