将DATETIME插入db时如何修复错误

时间:2011-02-10 03:39:27

标签: java sql derby

我想这样做:

pr.setStartdate("2006-09-10T00:00:00");

我收到此错误:

java.sql.SQLDataException: The syntax of the string representation of a datetime value is incorrect.

关于如何成功插入的任何想法都会很棒。

这里有更多代码。 现在我需要setDate吗?或者setString是否适用于begintime,endtime和date?它们都是DATETIME对象:

PreparedStatement pstmt = conn.prepareStatement("UPDATE Event SET date=?, begintime=?, endtime=?, status=?, productionid=?, conceptual_packageid=? WHERE id=?");
        pstmt.setString(1, pkg.getDate());
        pstmt.setString(2, pkg.getBeginTime());
        pstmt.setString(3, pkg.getEndTime());
        pstmt.setString(4, pkg.getStatus());
        pstmt.setString(5, pkg.getProductionID());
        pstmt.setString(6, pkg.getConceptual_PackageID());
        pstmt.setString(7, pkg.getId());

        pstmt.executeUpdate();
        pstmt.close();

5 个答案:

答案 0 :(得分:6)

我建议您使用PreparedStatement的setTimestamp(...)和setDate(...)方法,然后将实际的Date对象传递给它们,而不是使用字符串。如果您只能在“pr”类中使用字符串,则将字符串转换为derby doc中指定的格式,然后使用以下代码

java.sql.Timestamp.valueOf("time/date converted");

答案 1 :(得分:3)

据我所知,derby没有“DATETIME”数据类型,它们支持DATE,TIME和TIMESTAMP。

http://db.apache.org/derby/docs/10.10/ref/crefsqlj31068.html

因此,如果您想在该字段中保留时间和日期值,我会确保您将'date'列声明为TIMESTAMP。

其次我会单独引用列名'date',因为DATE是保留数据类型。我不知道这是不是问题,但可能想尝试一下。

第三,在设置/获取'date'列时,我会尝试使用set / getTimestamp并在适用的情况下传递/分配java.sql.Timestamp对象。

希望能提供一些帮助。

答案 2 :(得分:2)

  

日期,时间和时间戳不能   在表达中彼此混合。   Derby支持以下格式   对于TIMESTAMP:

     

yyyy-mm-dd hh:mm:ss [.nnnnnn]
  YYYY-MM-DD-HH.MM.SS [.nnnnnn]

     

年份必须始终有四位数。   月,日和小时可能有一个   或两位数。分钟和秒   必须有两位数。纳秒,如果   目前,可能有一到六个   位数。

所以,你应该用空格或连字符替换'T'。

答案 3 :(得分:1)

如果其他人遇到这个月份的问题(正如我所做的那样)做一个类似但不完全相同的操作:仔细看看Lev Khomich的答案中的两种格式:天之间/小时之间有一个空格。小时/分钟,以及小时/分钟之间的日期/小时之间的短划线。我刚才有一个案例,使用时间在小时/分钟之间的SQL语句,其中一天/小时之间的空格导致错误,但破折号没有。

我习惯于DB2,它在使用小时/分钟和分钟/秒之间的时段时接受短划线或空格,这使得它更容易被忽视。我只是假设在白天/小时之间允许空格或破折号。

答案 4 :(得分:0)

我有同样的问题,然后我在这里找到了解决方案:

http://apache-database.10148.n7.nabble.com/Date-Timestamp-format-for-inserts-td99979.html

基本上你必须使用这种格式:

yyyy-mm-dd-hh.mm.ss[.nnnnnn]

例如,这个插件对我有用:

statement.executeUpdate("INSERT INTO animal VALUES (1, 1, 'Elsa', '2006-09-10-00.00.00')");