【问题标题】:Inserting db rows with Korma使用 Korma 插入数据库行
【发布时间】:2012-03-07 06:16:37
【问题描述】:

我有一个使用以下架构的数据库表:

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 实体来使用 Korma

(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)

知道为什么吗?

(如果有帮助,查询数据库可以正常工作,所以看起来不像是连接问题)

谢谢!

【问题讨论】:

  • 不加密密码可以尝试插入吗?
  • 我刚做了,没什么区别。

标签: sql database clojure schema korma


【解决方案1】:

您需要使用java.sql.Date 而不是java.util.Date

(java.sql.Date. 2012 2 16)

顺便说一句,您可能想调查 clj-time 作为时间处理解决方案。 Java 的标准时间和日期相关类是完全疯狂的(正如当前问题所证明的那样)。

【讨论】:

  • 谢谢,成功了!我会牢记clj-time 库。
猜你喜欢
  • 1970-01-01
  • 2023-04-06
  • 2021-02-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-14
  • 2013-08-19
相关资源
最近更新 更多