-1

我正在使用 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

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

谢谢

4

2 回答 2

6

您的数据库根本不需要特定的日期格式 - 首先您不应该将数据作为字符串插入。您应该使用准备好的语句并使用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 中。

于 2011-08-29T08:12:33.407 回答
1

试试这个:

Date date = ...
DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
String date_for_mysql = df.format(date);

在此处查看相关的 SO 答案:

如何解析日期?
Java日期格式?
将MySql DateTime类型转换为更友好的东西
如何将java日期类型存储为mysql日期类型?
将日期转换为 MYSQL 日期格式
如何将字符串中的日期转换为 Sql 日期?
如何从 Java 将当前日期设置为 MySQL 日期列?

于 2011-08-29T08:08:57.967 回答