我正在使用 JDatechooser netbeans swing 插件进行桌面应用程序开发。默认情况下,其日期格式为 mm/dd/yy,但它不是数据库所需的格式。我需要将其转换为 yyyy-mm-dd 格式。我尝试使用 SimpleDateformat 类,它给了我以下错误:com.mysql.jdbc.MysqlDataTruncation: Data truncation: Incorrect date value: '8/29/11' for column 'registered_date' at row 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 注入(inject)攻击。始终使用准备好的语句并将任何参数指定为参数,而不是将它们包含在 SQL 中。
关于Java 日期格式错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7227593/