Java:插入到表中的日期时间数据



我正在尝试将当前日期和时间插入MS-SQL数据库中的变量。我使用这种格式:

DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS"); 
Calendar cal = Calendar.getInstance();  
System.out.println(dateFormat.format(cal.getTime()));

我得到这个结果 2013-01-28 09:29:37.941

我在数据库中的字段是datetime定义的,正如我在具有相同字段的其他表中所看到的那样,日期和时间的编写方式完全像这样 2011-07-05 14:18:33.000。

我尝试使用在java程序中执行的查询插入数据库,但是出现此错误

SQL 异常:状态:S0003 消息:瓦尔查尔的转换 数据类型为日期时间数据类型的值超出范围。错误 : 242

我的查询是这样的:

query = "INSERT INTO Companies CreatedOn"+ 
         "VALUES ('" + dateFormat.format(cal.getTime()) + "')"

但我不明白我做错了什么。

根据错误描述,您将不正确的类型插入到数据库中。请参阅 JDBC 到 MSSQL。您应该将日历转换为时间戳。

尝试使用:

PrepareStatement statement 
    = connection.prepareStatement("INSERT INTO Companies CreatedOn VALUES(?)");
java.sql.Timestamp timestamp = new java.sql.Timestamp(cal.getTimeInMillis());
statement.setTimestamp(1, timstamp);
int insertedRecordsCount = statement.executeUpdate();

首先,不要使用字符串连接。你有没有关心过SQL注入?

正确的方法是使用预准备语句:

想法是你用占位符定义语句,而不是为这些占位符定义值。

有关更多详细信息,请参阅@Taky的答案。

dateFormat#format此方法

返回格式化字符串而不是Date对象。数据库字段DateTime,并且根据文档String期望java.sql.Timestamp插入到那里。

为了符合 SQL DATE 的定义,毫秒值 由 java 包装.sql.Date 实例必须通过设置 小时、分钟、秒和毫秒到零 与实例关联的特定时区。

尝试在查询中使用对象而不是java.sql.Timestamp字符串,我建议您使用 PreparedStatement .

这是因为您尝试将字符串日期值保存到日期类型数据库字段。

将其转换为数据数据类型

您还可以使用日期时间"未分离"格式yyyymmdd hh:mm:ss

您可以使用Joda框架来处理日期/时间。它将自己的日期/时间类型映射到休眠/SQL 类型没有问题。当您在 HQL 查询中设置参数时,joda 会进行正确的类型映射。

如果你想存储当前的日期和时间,那么你应该使用MYSQL内置的方法NOW()。有关简要文档,请参阅 http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html。所以你的代码会像。

INSERT INTO Companies CreatedOn VALUES(NOW())"

但是,如果你想使用 java Date-util 来做到这一点,那么它应该是

Calendar cal = Calendar.getInstance(); 
java.sql.Timestamp timestamp = new Timestamp(cal.getTimeInMillis());

相关内容

  • 没有找到相关文章

最新更新