我有一个小型的Clojure程序,它使用Clojure工具在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)"]))))既然我用的是莱宁根,这是我的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运行,但仍然得到了相同的坏结果。
发布于 2012-04-20 10:58:48
这是一个常见的HSQLDB配置问题。
HSQLDB的默认配置不适合测试使用。因此,它将.log条目的写入和同步延迟了500毫秒,并且当连接关闭时不会关闭数据库。在您的URL中尝试以下任何一个设置:
:subname "file:/tmp/tramwaydb;hsqldb.write_delay=false"或
:subname "file:/tmp/tramwaydb;shutdown=true"参见这里的各种选项:http://hsqldb.org/doc/2.0/guide/dbproperties-chapt.html
https://stackoverflow.com/questions/10238399
复制相似问题