Вставка строк БД с помощью Korma - PullRequest
4 голосов
/ 16 февраля 2012

У меня есть таблица БД, которая использует следующую схему:

CREATE TABLE users
(id SERIAL PRIMARY KEY,
  username TEXT UNIQUE NOT NULL,
  password TEXT NOT NULL,
  email TEXT NOT NULL,
  admin BOOLEAN NOT NULL,
  active BOOLEAN NOT NULL,
  created DATE NOT NULL);

Я использую Корму, определяя users сущность

(defentity users
           (has-many tips))

И я пытаюсь заполнить значения, используя следующие функции:

(defn make-user-vals [username pass email]
  "Creates an active, non-admin user"
  {:username username, 
   :password (crypt/encrypt pass), 
   :email email,
   :admin false,
   :active true,
   :created (java.util.Date.)})

(defn seed-users! []
  (insert ent/users
    (values 
      (users/make-user-vals "admin" "f00b4r" "foo@example.com"))))

(seed-users!) терпит неудачу со следующим (не очень информативным для моих глаз) сообщением:

Failure to execute query with SQL:
INSERT INTO users (username, password, email, admin, active, created) VALUES (?, ?, ?, FALSE, TRUE, ?)  ::  [admin $2a$10$AVdxz9HvYOyszhcXVrTVi.oBcbz9EZVfGZYNUI3iDMb0hj3igvpEy foo@example.com #<Date Wed Feb 15 21:59:10 CET 2012>]
ClassCastException java.lang.RuntimeException cannot be cast to java.sql.SQLException  clojure.java.jdbc/print-sql-exception (jdbc.clj:350)

Есть идеи, почему?

(если это помогает, запрос к БД работает, поэтому это не выглядит как проблема с подключением)

Спасибо!

1 Ответ

6 голосов
/ 16 февраля 2012

Вам нужно использовать java.sql.Date вместо java.util.Date:

(java.sql.Date. 2012 2 16)

Кстати, вы можете захотеть исследовать clj-time как решение для обработки времени. Стандартные классы Java, относящиеся ко времени и дате, абсолютно безумны (о чем свидетельствует настоящая проблема).

...