Die Clojure-Anweisung jdbc create-table wird nur mit Leiningen REPL ausgeführt

Ich habe ein kleines Clojure-Programm, das das verwendetClojure JDBC Tools zum Erstellen einer Tabelle in einer HSQL-Datenbank. Es scheint jedoch nur dann tatsächlich eine Tabelle zu erstellen, wenn ich sie von Leiningens REPL aus starte. Die Tabelle wird nicht erstellt, wenn ich den Code mithilfe von ausführelein run oder von meiner IDE (IntelliJ). Es wurden keine Ausnahmen gemeldet. In beiden Fällen ist die Ausgabe nur "(0)".

Hier ist das Code-Snippet:

<code>(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)"]))))
</code>

Und da ich Leiningen benutze, ist hier meineproject.clj:

<code>(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)
</code>

Wenn ich mache:

<code>$ lein repl

tramway.core=> (-main)
(0)
nil
</code>

und dann überprüfen/tmp/tramway.log Ich kann das sehenCREATE TABLE erfolgreich ausgeführt.

Wenn ich jedoch tue:

<code>$ rm -rf /tmp/tramway.*
$ lein run
(0)
</code>

und überprüfen Sie dann die gleiche Datei, es ist leer. Estut erstellen Sie die.log, .properties, und.script Dateien. Alle außer dem.log Datei hat Inhalt; Es gibt nur keine Aufzeichnungen über dieCREATE TABLE laufen gelassen worden.

Was mache ich falsch? Ich würde das gleiche Ergebnis erwarten, ob ich meine (-main) -Funktion über die REPL ausführe oder Leiningen sie automatisch ausführen lasse.

Ich habe auch versucht, die Tischkreation aus dem-main Funktioniere und starte es einfach als Skript durch meine IDE, und ich bekomme immer noch das gleiche schlechte Ergebnis.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage