在.edn文件中使用#inst将时间戳种子植入clojure中的jdbc数据库

在.edn文件中使用#inst将时间戳种子植入clojure中的jdbc数据库,clojure,edn,Clojure,Edn,我使用一个.edn文件作为数据库种子,需要一种方法在该文件中设置时间戳,并将其写入数据库而不会出现java错误。(事实证明,您不能只是将时间戳作为字符串输入,然后让它自动转换,因为我们中的一些人可能会习惯于使用比java更动态的语言) 我已经得到了如下.edn文件,如果我删除#inst并将其改为nil,则该文件将正确播种 [{:table :subscriptions :data [{:user_id 1 :price 9900 :transacted

我使用一个
.edn
文件作为数据库种子,需要一种方法在该文件中设置时间戳,并将其写入数据库而不会出现java错误。(事实证明,您不能只是将时间戳作为字符串输入,然后让它自动转换,因为我们中的一些人可能会习惯于使用比java更动态的语言)

我已经得到了如下
.edn
文件,如果我删除
#inst
并将其改为nil,则该文件将正确播种

[{:table :subscriptions
  :data [{:user_id 1
          :price 9900
          :transacted_at nil
          :begin_at nil
          :end_at #inst "2020-01-01T22:00:01-07:00"}]}]
但是,如上所述包含的
#inst
会产生以下错误:

org.postgresql.util.PSQLException:
无法推断用于java.util.Date实例的SQL类型。
使用带有显式类型值的setObject()

这里的问题是如何修复该特定错误并将时间戳输入数据库。

EDN文件没有问题。当您尝试插入数据时,您的问题来自JDBC驱动程序。您不会说您使用的是哪个Clojure JDBC库,但是如果您使用的是
next.JDBC
,您应该需要
next.JDBC.date-time
命名空间,这将自动启用从
java.util.date
到有效PostgreSQL数据类型的转换。

谢谢。我没有意识到jdbc驱动程序有多种选择。我正在使用clojure.java.jdbc。我是否应该改为next.jdbc?@sean_corfield当你说“valid postgresql datatype”时,我很困惑,因为sql是基于文本的,而不是类型化的(尽管postgresql在解释sql文本之后肯定有类型)。您是指java postgresql驱动程序的有效数据类型吗?@sean_corfield我可以看出您是next.jdbc的作者。我肯定会考虑在将来使用它,但现在我需要最简单的解决方案,简单地开始。我想知道是否有一种方法可以通过clojure.java.jdbc实现这一点,或者这是否会更加困难。我教过的大多数关于clojure的好书都是这个库,我的感觉是我应该先知道如何使用它,然后才能欣赏jdbc。clojure.java.jdbc和next.jdbc不是jdbc驱动程序,它们是clojure库。您还需要一个JDBC驱动程序——它是特定于数据库的(和特定于供应商的:一个给定的数据库可以有多个驱动程序)。关于clojure.java.JDBC和next.JDBC:c.j.j的元注释可能不会得到更多的版本(现在是0.7.11),因为所有未来的工作都集中在next.JDBC上,它本质上是c.j.j的1.0.x版本。是的,它有一个稍微不同的API。是的,大多数现有书籍/教程都使用c.j.j。不,使用next.jdbc不需要知道c.j.j(c.j.j的文档要薄得多,不会更新)。