数据库有的日期是0000-00-00的日期,需要怎么才能显示?

数据库有的日期是0000-00-00的日期,需要怎么才能显示?

"C:\Program Files\Java\jdk-11.0.7\bin\java.exe" "-javaagent:D:\English\IDEA\IntelliJ IDEA 2020.3.1\lib\idea_rt.jar=57141:D:\English\IDEA\IntelliJ IDEA 2020.3.1\bin" -Dfile.encoding=UTF-8 -classpath E:\IdeaProjects\imooc-jdbc-goods\out\production\imooc-jdbc-goods;E:\IdeaProjects\imooc-jdbc-goods\bin\mysql-connector-java-8.0.22.jar com.hui.sample.HumanResourceApplication

1--查询全部商品信息

2--新增商品

3--更新商品价格

4--删除商品

请输入选项:

1

java.sql.SQLException: Zero date value prohibited

at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:129)

at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97)

at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:89)

at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:63)

at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:73)

at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:99)

at com.mysql.cj.jdbc.result.ResultSetImpl.getDate(ResultSetImpl.java:751)

at com.mysql.cj.jdbc.result.ResultSetImpl.getDate(ResultSetImpl.java:765)

at com.hui.sample.command.SelectGoodsCommand.execute(SelectGoodsCommand.java:27)

at com.hui.sample.HumanResourceApplication.main(HumanResourceApplication.java:21)

Caused by: com.mysql.cj.exceptions.DataReadException: Zero date value prohibited

at com.mysql.cj.result.SqlDateValueFactory.localCreateFromDate(SqlDateValueFactory.java:77)

at com.mysql.cj.result.SqlDateValueFactory.localCreateFromDate(SqlDateValueFactory.java:50)

at com.mysql.cj.result.AbstractDateTimeValueFactory.createFromDate(AbstractDateTimeValueFactory.java:67)

at com.mysql.cj.protocol.a.MysqlTextValueDecoder.decodeDate(MysqlTextValueDecoder.java:73)

at com.mysql.cj.protocol.result.AbstractResultsetRow.decodeAndCreateReturnValue(AbstractResultsetRow.java:90)

at com.mysql.cj.protocol.result.AbstractResultsetRow.getValueFromBytes(AbstractResultsetRow.java:241)

at com.mysql.cj.protocol.a.result.ByteArrayRow.getValue(ByteArrayRow.java:91)

... 4 more


Process finished with exit code 0


正在回答

登陆购买课程后可参与讨论,去登陆

2回答

同学你好,JAVA连接MySQL数据库,在操作值为0的timestamp类型时不能正确的处理,而是默认抛出一个异常,所以在JDBC连接串中有一项属性:zeroDateTimeBehavior,可以用来配置出现这种情况时的处理策略,该属性有下列三个属性值:

    ​ exception:默认值,即抛出SQL state [S1009]. Cannot convert value....的异常;

    ​ convertToNull:将日期转换成NULL值;

     round:替换成最近的日期,即0001-01-01;

如上所示,zeroDateTimeBehavior就是针对日期为0时的配置。

祝学习愉快!

好帮手慕小班 2021-01-07 16:05:20

同学你好,这是由于Mysql数据库在面对0000-00-00 00:00:00日期的处理时,如果没有设置对应的对策,就会产生异常。同学可以在在url中设置zeroDateTimeBehavior来处理,比如:

url=jdbc:mysql://localhost:3306/book?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull

如上所示,修改后再来试试。

祝学习愉快!

  • 提问者 叶锦辉 #1
    &zeroDateTimeBehavior=convertToNull

    这个是代表什么?竟然真的可以


    2021-01-07 16:20:20
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师