【发布时间】:2011-12-04 19:12:07
【问题描述】:
情况是这样的:
PostgreSQL 数据库表有一个字段dateAdded,即timestamp
Pojo 模型对象将此字段映射为
class MyModel{
org.joda.time.DateTime dateAdded;
}
我的 Dao 实现是在 Spring JDBC 模板中,它是这样的:
SqlParameterSource parameters = new BeanPropertySqlParameterSource(patient);
jdbcInsert.execute(parameters);
我从客户端读取模型并使用@Model 构建对象。到目前为止一切都很好。当我执行这个时,数据库抛出一个异常说:
[Edit Erwin]:原来异常不是来自数据库。
org.postgresql.util.PSQLException: Bad value for type timestamp : 2011-10-10T21:55:19.790+03:00
我不想通过实现完整的 INSERT 语句来手动进行格式化,因为涉及的字段很多。
这里最好的解决方案是什么?有没有办法在所有呼叫中配置DateTime 的toString()。我也想过从 DateTime 创建一个继承的类,但是……嗯……这是最终的。
--
编辑
根据 Erwin,我通过插入一个虚拟表测试了 DateTime 值“2011-10-10T21:55:19.790+03:00”,它正在工作。但无法使用 JDBC。与 JDBC 驱动有关的东西?
【问题讨论】:
-
'2011-10-10T21:55:19.790+03:00' 对于我知道的所有 PostgreSQL 版本中的时间戳都有效。你的版本是什么?您的 SQL 语句中是否缺少时间戳(我在此处添加)周围的 单引号?如果还不行,能否给我们看一下对应的postgresql服务器日志,这样就可以解惑了。
-
Postgres 9. 事情是这样的,我不是在这里写 SQL 插入语句。我只是构建模型对象,使用 BeanPropertySqlParameterSource 包装它,然后将其推送到 Spring JDBC SimpleJdbcInsert 对象。这将在内部处理 SQL INSERTS。你是对的。我刚刚使用虚拟表测试了相同的值并且它正在工作。这太奇怪了。
-
Erwin,花了一段时间才找到 Pgsql 服务器日志。没有从该操作中注销的错误消息。
-
无法帮助您处理 JDBC 部分,我的专长在于 postgresql。如果 JDBC 的语法有误,您可以通过提供替代语法(如
'2011-10-10 21:55:19.790+03:00')来解决此问题。T,虽然完全合法是不寻常的。 -
谢谢欧文。希望别人有答案。正如你所说,我也觉得很奇怪。
标签: spring postgresql datetime jodatime spring-jdbc