我正在尝试使用 Clojure 中的数据库。此时,我想使用Ragtime来修改数据库架构本身,使用Korma来查询和插入数据,并使用H2作为实际的数据库。
我认为我正确使用了它们,但是当我尝试使用 Korma 访问表时出现错误。
这是我的project.clj:
(defproject dbexplore "0.1.0-SNAPSHOT"
:dependencies [[org.clojure/clojure "1.6.0"]
[korma "0.4.0"]
[com.h2database/h2 "1.4.182"]
[ragtime "0.3.7"]]
:plugins [[ragtime/ragtime.lein "0.3.7"]]
:ragtime {:migrations ragtime.sql.files/migrations
:database "jdbc:h2:/home/zck/Documents/dbexplore/resources/db/dbexplore.db"}
:main dbexplore.core)
所以我要导入 korma、h2database 和 ragtime。我不确定它是否将 Ragtime 迁移指向正确的数据库位置。
我创建了一个迁移文件,内容如下:
create table users (id INT, first varchar(32), last varchar(32));
然后运行它:
zck@zck-desktop:~/Documents/dbexplore$ lein ragtime migrate
Applying 2014-10-22-2-11-create-tables
我制作了一个简单的 core.clj 文件,它只从 users 表中选择所有内容:
(ns dbexplore.core
(:require [korma.db :as db]
[korma.core]))
(def db-connection (db/h2 {:db "./resources/db/dbexplore.db"}))
(db/defdb korma-db db-connection)
(korma.core/defentity users)
(defn -main []
(korma.core/select users))
但是在运行它时lein run
,我得到一个错误:
Failure to execute query with SQL:
SELECT "users".* FROM "users" :: []
JdbcSQLException:
Message: Table "users" not found; SQL statement:
SELECT "users".* FROM "users" [42102-182]
SQLState: 42S02
Error Code: 42102
Exception in thread "main" org.h2.jdbc.JdbcSQLException: Table "users" not found; SQL statement:
SELECT "users".* FROM "users" [42102-182], compiling:(/tmp/form-init7833348906040195763.clj:1:90)
我的怀疑是我h2
在 core.clj 的调用中指向另一个数据库文件,而不是一个 ragtime 正在迁移,但我不确定如何正确指定它。如何让这两个库使用同一个数据库?