Java:插入表日期时间数据

标签 java sql sql-server datetime jdbc

我正在尝试将当前日期和时间插入到 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 Exception: State : S0003 Message: The conversion of a varchar data type to a datetime data type of the value is out of range. Error : 242

我的查询是这样的:

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

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

最佳答案

根据error description ,您正在向数据库中插入不正确的类型。参见 JDBC to MSSQL .您应该将日历转换为 Timestamp .

尝试使用:

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();

关于Java:插入表日期时间数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14558289/

相关文章:

sql-server - Entity Framework 查询结果重复

java - 程序编译但无法运行,无法使用构造函数

java - 使用 Apache Commons-Imaging/Sanselan 更新 Tiff-Metadata

sql - IIS 和 SQL 可以在同一个 Azure 虚拟机上运行吗?

sql - 函数式编程和 SQL

sql-server - SQL Server 2008 见证服务器错误

java - hadoop在reducer中获取最大值

java - 从 backstack 中删除不在 backstack 顶部的特定 fragment

mysql - 向新列添加增量值

sql-server - 加载 SSIS 包时出错