Используйте #inst в файле .edn, чтобы заполнить временную метку для базы данных jdb c в clojure - PullRequest
1 голос
/ 01 марта 2020

Я использую файл .edn в качестве начального числа базы данных, и мне нужен способ установить временную метку в этом файле и записать ее в базу данных без ошибки java. (Оказывается, вы не можете просто ввести метку времени в виде строки и автоматически преобразовать ее, поскольку некоторые из нас могут использовать ее в более динамичных c языках, чем 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:
Can't infer the SQL type to use for an instance of java.util.Date. 
Use setObject() with an explicit Types value  

Вопрос здесь в том, как исправить эту указанную ошибку c и получить метку времени в базе данных.

1 Ответ

3 голосов
/ 01 марта 2020

Файл EDN в порядке. Ваша проблема связана с драйвером JDB C, когда вы пытаетесь вставить данные. Вы не говорите, какую библиотеку Clojure JDB C вы используете, но если вы используете next.jdbc, вам потребуется пространство имен next.jdbc.date-time, и это автоматически разрешит преобразование из java.util.Date в действительные данные PostgreSQL типа.

...