【问题标题】:Java Dateformat ErrorJava 日期格式错误
【发布时间】:2011-11-05 20:32:12
【问题描述】:

我正在使用 JDatechooser netbeans swing 插件进行桌面应用程序开发。默认情况下,它的日期格式是 mm/dd/yy,但它不是 db 所需的格式。我需要将其转换为 yyyy-mm-dd 格式。我尝试使用 SimpleDateformat 类,它给了我以下错误:com.mysql.jdbc.MysqlDataTruncation: Data truncation: Incorrect date value: '8/29/11' for column 'registered_date' at row 1

谁能给我一个很好的解决方案来正确地做到这一点

谢谢

【问题讨论】:

  • java.util 日期时间 API 及其格式化 API SimpleDateFormat 已过时且容易出错。建议完全停止使用它们并切换到modern Date-Time API。查看this answerthis answer 了解如何将java.time API 与JDBC 结合使用。

标签: java date datechooser


【解决方案1】:

您的数据库根本不需要特定的日期格式 - 首先您不应该将数据作为 字符串 插入。您应该使用准备好的语句并使用setDate。理想情况下,您应该执行尽可能少的字符串转换 - 从JDateChooser 中获取值时不需要一个,插入数据库时​​也不需要一个:

// Unfortunately you need to convert from java.util.Date to java.sql.Date
statement.setDate(1, new java.sql.Date(chooser.getDate().getTime()));

(请注意,您确实可能需要记住时区,但这是另一回事...您可以调用 setDate 过载,它也需要一个日历。)

如果您一直在通过构建包含值的完整 SQL 语句来插入(或查询)数据,您应该立即停止这样做。您不仅会遇到这种转换问题,还会让自己面临 SQL 注入攻击。始终使用准备好的语句并指定任何参数作为参数,而不是将它们包含在 SQL 中。

【讨论】:

    【解决方案2】:

    【讨论】:

    猜你喜欢
    • 2017-09-10
    • 2011-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多