Rom*_*om1 4 sql database schema clojure korma
我有一个使用以下架构的数据库表:
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);
Run Code Online (Sandbox Code Playgroud)
我通过定义一个users实体来使用Korma
(defentity users
(has-many tips))
Run Code Online (Sandbox Code Playgroud)
我尝试使用以下函数为值赋值:
(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"))))
Run Code Online (Sandbox Code Playgroud)
(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)
Run Code Online (Sandbox Code Playgroud)
知道为什么吗?
(如果这有帮助,查询数据库工作,所以它看起来不像连接问题)
谢谢!
您需要使用java.sql.Date而不是java.util.Date:
(java.sql.Date. 2012 2 16)
Run Code Online (Sandbox Code Playgroud)
顺便提一下,您可能希望将其clj-time作为时间处理解决方案进行调查.Java的标准时间和日期相关的类完全是疯了(正如本期的问题所证明的那样).