【问题标题】:Clojure jdbc create-table statement does not run unless using Leiningen REPL除非使用 Leiningen REPL,否则 Clojure jdbc create-table 语句不会运行
【发布时间】:2012-05-01 13:50:43
【问题描述】:

我有一个小的 Clojure 程序,它使用 Clojure JDBC 工具在 HSQL 数据库中创建一个表。但是,如果我从 Leiningen 的 REPL 运行它,它似乎只会实际创建表。如果我使用 lein run 或从我的 IDE (IntelliJ) 运行代码,它不会创建表。没有报告异常。在这两种情况下,输出都只是“(0)”。

这里是sn-p的代码:

(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 将其作为脚本运行,但我仍然得到同样糟糕的结果。

【问题讨论】:

    标签: clojure hsqldb leiningen


    【解决方案1】:

    这是一个常见的 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

    【讨论】:

    • 做到了。谢谢!这是我第一次涉足 HSQLDB 和 Clojure,所以我不知道从哪里开始。希望我能给你更多的支持!
    猜你喜欢
    • 2014-02-13
    • 2013-09-22
    • 2015-09-21
    • 2018-06-06
    • 2017-05-15
    • 2020-12-30
    • 2016-06-16
    • 1970-01-01
    • 2017-08-05
    相关资源
    最近更新 更多