我有一个小的 Clojure 程序,它使用Clojure JDBC工具在 HSQL 数据库中创建一个表。但是,如果我从 Leiningen 的 REPL 运行它,它似乎只会实际创建表。lein run
如果我使用或从我的 IDE (IntelliJ)运行代码,它不会创建表。没有报告异常。在这两种情况下,输出都只是“(0)”。
这是代码片段:
(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 将其作为脚本运行,但我仍然得到同样的坏结果。