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.