簡體   English   中英

除非使用Leiningen REPL,否則Clojure jdbc create-table語句不會運行

[英]Clojure jdbc create-table statement does not run unless using Leiningen REPL

我有一個小的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運行它作為腳本,我仍然得到相同的錯誤結果。

這是一個常見的HSQLDB配置問題。

HSQLDB的默認配置不適用於測試用途。 因此,它會延遲寫入和同步.log條目500毫秒,並且在關閉連接時不會關閉數據庫。 在您的網址中嘗試以下任一設置:

:subname "file:/tmp/tramwaydb;hsqldb.write_delay=false"

要么

:subname "file:/tmp/tramwaydb;shutdown=true"

請參閱此處的各種選項: http//hsqldb.org/doc/2.0/guide/dbproperties-chapt.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM