Java 如何修复将DATETIME插入数据库时的错误

Java 如何修复将DATETIME插入数据库时的错误,java,sql,derby,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. 任何关于如何成功插入的想法都将非常好 这里有更多的代码。 现在我需要设定日期吗?或者设置字符串是否适用于开始时间、结束时间和日期?它们都是DATETIME对象: Prepar

我正试图做到这一点:

pr.setStartdate("2006-09-10T00:00:00");
我得到这个错误:

java.sql.SQLDataException: The syntax of the string representation of a datetime value is incorrect.
任何关于如何成功插入的想法都将非常好

这里有更多的代码。 现在我需要设定日期吗?或者设置字符串是否适用于开始时间、结束时间和日期?它们都是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();
日期、时间和时间戳不能为空 在表达上相互混合。 Derby支持以下格式 对于时间戳:

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

年份必须始终有四位数。 月、日和小时可能有一个 或者两位数。分秒 必须有两个数字。纳秒,如果 现在,可能有一到六个 数字


因此,您应该用空格或连字符替换“T”。

我建议您使用PreparedStatement的setTimestamp(…)和setDate(…)方法,然后将实际的日期对象传递给它们,而不是使用字符串。如果您仅限于使用“pr”类中的字符串,请将字符串转换为中指定的格式,然后使用以下代码

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

据我所知,derby没有“DATETIME”数据类型,它们支持日期、时间和时间戳

因此,如果希望在该字段中同时保留时间和日期值,我会确保您将“日期”列声明为时间戳

其次,我将单引号引述列名“date”,因为date是一种保留数据类型。我不知道这是否是这里的问题,但我可能想试试

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


希望这能提供一些帮助。

如果其他人遇到这个几个月前的问题(就像我一样)进行类似但不完全相同的操作:请仔细查看Lev Khomich答案中的两种格式:在天/小时之间有一个空格,在小时/分钟之间有冒号,还有一个日期/小时之间的破折号,句点在小时/分钟之间。我刚刚遇到了一个例子,使用了一个SQL语句,句点在小时/分钟之间,其中日期/小时之间的空格会导致错误,但破折号不会


我已经习惯了DB2,当使用小时/分钟和分钟/秒之间的周期时,它接受破折号或空格,这使得它更容易被忽略。我只是假设在天/小时之间允许使用空格或破折号。

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

基本上,您必须使用以下格式:

yyyy-mm-dd-hh.mm.ss[.nnnnnn]
例如,此插入适用于我:

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

尝试用单引号传递日期参数。我已经尝试过了,但我得到的错误行是,“未闭合字符文字,不是语句,”;“例外。我在这里被难住了,看起来很简单什么是“公关”?我不认为它是一个准备好的语句pr是我保存在数据库中的一个对象,然后我们需要查看pr类的代码以及jdbc代码,因此:ps.setTimestamp(Timestamp.valueOf(“2006-09-10 00:00:00”);我得到一个错误,时间戳的格式不正确:你能告诉我怎么了吗?这是我的INSERT stt:INSERT INTO APP.MYTABLE VALUES('2012-09-10 08:32:22[.1020]);我没有设置任何测试环境来测试这一点,但我知道没有数据库允许在日期格式中使用方括号。方括号是描述格式的标准符号,表示括号内的部分是可选的。但我认为你的问题可能是括号实际上无法出现。只需取出[和]。