当前位置: 首页 > 知识库问答 >
问题:

我怎么能转换获取日期从数据库和显示没有这个"java.sql.SQLExc0019:值'0000-00-00'不能表示为java.sql.日期"

朱令
2023-03-14

我试图显示的细节插入到我的数据库上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;
}

我预计输出为2000年3月2日,但它不起作用

共有1个答案

谭兴学
2023-03-14

快速修复是添加<代码>?在建立连接时,将该URL转换为MySQL JDBC URL。

一个较长的答案的开头会指出...

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

MySQL的“零”日期行为可能被sql\u模式的某些设置所禁止。我们可能还希望确保列允许空值(即,如果列未定义为非空),和/或修改列定义以提供非零默认值。。。

列中已有的“零”日期值可以替换为空值,例如:

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的日期行为

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

摘录:

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

 类似资料:
  • 我正在做一个需要从数据库中提取数据的项目,我使用SpringMVC从数据库中构建模型来选择数据。 以下是我的JSP页面的问题: 如您所见,我尝试使用

  • 问题内容: 我正在做一个需要从数据库中提取数据的项目,我使用Spring MVC从数据库中构建模型以选择数据。 这是我的 JSP页面 的问题 : 如您所见,我尝试从标记库中使用。 问题: 但是当使用此 控制器 准备我的模型时 : 它给我这样的错误: 路径为[/ controller]的servlet [appServlet]的service()抛出异常[请求处理失败;嵌套的异常是org.hiber

  • 我有一个包含日期的数据库表 有没有什么方法可以在不改变表结构的情况下获得?

  • 问题内容: 我有一个包含日期的数据库表 我正在使用MySQL。有时从程序中将没有日期的数据传递到数据库。因此, 当使用带错误的日期列调用表数据时,日期值会自动分配给它 在插入数据时,我尝试将null值传递给日期,但是将其分配给当前时间。 有什么办法可以在不更改表结构的情况下获得? 问题答案: 您可以在数据源配置中直接使用此JDBC URL: jdbc:mysql://您的服务器:3306 /您的数

  • 问题内容: 我最近接手了一个十年前创建的旧项目。它使用MySQL 5.1。 除其他外,我需要将默认字符集从latin1更改为utf8。 例如,我有这样的表: 我设置了自己的Mac来进行此工作。不用考虑太多,我运行了“ brew install mysql”,它安装了MySQL 5.7。所以我有一些版本冲突。 我下载了此数据库的副本并将其导入。 如果我尝试运行这样的查询: 我收到此错误: 我以为可以

  • 我想在MySQL中允许零日期。我已将更改为。 我已经在中更改了它。 然而,当我尝试插入数据时,我得到了错误, 数据截断:不正确的datetime值:“0000-00-00 00:00:00” MySQL版本为5.7.18。 这方面的任何想法都将大有帮助。