Instrukcja Clojure jdbc create-table nie działa, chyba że używa Leiningen REPL
Mam mały program Clojure, który używaClojure JDBC narzędzia do tworzenia tabeli w bazie danych HSQL. Jednak wydaje się, że faktycznie tworzy tabelę, jeśli uruchomię ją z REPL Leiningena. Nie tworzy tabeli, jeśli uruchomię kod za pomocąlein run
lub z mojego IDE (IntelliJ). Nie zgłoszono żadnych wyjątków. W obu przypadkach wyjście ma wartość „(0)”.
Oto fragment kodu:
<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>
A ponieważ używam Leiningen, oto mojaproject.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>
Jeśli zrobię:
<code>$ lein repl tramway.core=> (-main) (0) nil </code>
a następnie sprawdź/tmp/tramway.log
WidzęCREATE TABLE
wykonane pomyślnie.
Jeśli jednak to zrobię:
<code>$ rm -rf /tmp/tramway.* $ lein run (0) </code>
a następnie sprawdź ten sam plik, jest pusty. Torobi stwórz.log
, .properties
, i.script
pliki. Wszystko oprócz.log
plik ma zawartość; po prostu nie ma zapisuCREATE TABLE
po uruchomieniu.
Co ja robię źle? Spodziewałbym się, że będę miał taki sam rezultat, niezależnie od tego, czy uruchomię funkcję (-main) z REPL, czy też Leiningen uruchomi ją automatycznie.
Próbowałem także wyjąć stół ze stołu-main
funkcja i uruchamianie jej jako skryptu za pośrednictwem mojego IDE, a ja wciąż otrzymuję ten sam zły wynik.