La sentencia Clojure JDBC create-table no se ejecuta a menos que use Leiningen REPL
Tengo un pequeño programa de Clojure que usa elClojure JDBC Herramientas para crear una tabla en una base de datos HSQL. Sin embargo, solo parece crear la tabla si la ejecuto desde el REPL de Leiningen. No crea la tabla si ejecuto el código usandolein run
o desde mi IDE (IntelliJ). No hay excepciones reportadas. En ambos casos, la salida es simplemente "(0)".
Aquí está el fragmento de código:
<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>
Y ya que estoy usando Leiningen, aquí está miproject.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>
Si lo hago:
<code>$ lein repl tramway.core=> (-main) (0) nil </code>
y luego revisar/tmp/tramway.log
Puedo ver elCREATE TABLE
ejecutado exitosamente
Sin embargo, si lo hago:
<code>$ rm -rf /tmp/tramway.* $ lein run (0) </code>
y luego comprobar el mismo archivo, está vacío. Esohace crear el.log
, .properties
y.script
archivos. Todos menos el.log
archivo tiene contenido; simplemente no hay registro de laCREATE TABLE
habiendo sido ejecutado
¿Qué estoy haciendo mal? Espero tener el mismo resultado si ejecuto mi función (-main) desde el REPL o si Leiningen lo ejecuta automáticamente.
También he intentado sacar la creación de la mesa de la-main
Funcionar y ejecutarlo solo como un script a través de mi IDE, y todavía obtengo el mismo mal resultado.