我已经得到了使用Clojure JDBC工具在HSQL数据库中创建一个表一个小的Clojure程序。但是,如果我从Leiningen的REPL运行它,它似乎只能创建表。如果我使用lein run
或从我的IDE(IntelliJ)运行代码,它不创建表。没有例外报道。在这两种情况下,输出只是“(0)”。Clojure的JDBC创建表的语句不运行,除非使用Leiningen REPL
下面的代码片段:
(ns tramway.core
(:require [clojure.java.io :as io]
[clojure.java.jdbc :as sql]))
(def hsql-db {:subprotocol "hsqldb"
:subname "file:/tmp/tramwaydb"
:user "SA"
:password ""})
(defn -main []
(println (sql/with-connection hsql-db (sql/create-table
:footfall
[:id "INTEGER" "GENERATED ALWAYS AS IDENTITY(START WITH 1)"]
[:sample_date "DATE"]
[:exhibition "varchar(255)"]))))
而且因为我使用Leiningen,这是我project.clj
:
(defproject tramway "1.0.0-SNAPSHOT"
:description "Description here"
:dependencies [[org.clojure/clojure "1.3.0"]
[org.clojure/java.jdbc "0.1.4"]
[org.hsqldb/hsqldb "2.2.8"]]
:main tramway.core)
如果我做的:
$ lein repl
tramway.core=> (-main)
(0)
nil
,然后检查/tmp/tramway.log
我可以看到CREATE TABLE
成功执行。
但是,如果我这样做:
$ rm -rf /tmp/tramway.*
$ lein run
(0)
,然后检查同一个文件,它是空的。它确实创建.log
,.properties
和.script
文件。除了.log
文件以外的所有文件都有内容;没有运行CREATE TABLE
的记录。
我在做什么错?无论我从REPL运行我的(-main)函数,还是让Leiningen自动运行它,我都希望得到相同的结果。
我也曾尝试采取表创建了-main
功能和运行它只是通过我的IDE的脚本,我仍然得到同样的不良后果。
这做到了。谢谢!这是我第一次进入HSQLDB和Clojure,所以我不知道从哪里开始。希望我能更多地赞扬你! – Jonathan 2012-04-20 11:02:49