Tengo un pequeño programa Clojure que usa las herramientas Clojure JDBC para crear una tabla en una base de datos HSQL. Sin embargo, solo parece crear realmente la tabla si la ejecuto desde REPL de Leiningen. No crea la tabla si ejecuto el código usando lein run
o desde mi IDE (IntelliJ). No hay excepciones reportadas En ambos casos, la salida es solo "(0)".Clojure jdbc create-table statement no se ejecuta a menos que use Leiningen REPL
He aquí el fragmento de código:
(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)"]))))
Y ya que estoy usando Leiningen, aquí está mi 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)
Si hago:
$ lein repl
tramway.core=> (-main)
(0)
nil
y después comprobar /tmp/tramway.log
Veo que el CREATE TABLE
se ejecutó correctamente.
Sin embargo, si lo hago:
$ rm -rf /tmp/tramway.*
$ lein run
(0)
y compruebe el mismo archivo, que está vacío. Es hace crear los archivos .log
, .properties
y .script
. Todos menos el archivo .log
tienen contenido; simplemente no hay registro de que se haya ejecutado el CREATE TABLE
.
¿Qué estoy haciendo mal? Esperaría tener el mismo resultado si ejecuto mi función (principal) desde REPL o hago que Leiningen la ejecute automáticamente.
También intenté eliminar la creación de la tabla de la función -main
y ejecutarla solo como una secuencia de comandos a través de mi IDE, y sigo teniendo el mismo mal resultado.
que lo hizo. ¡Gracias! Es mi primera incursión en HSQLDB y también en Clojure, así que no sabía por dónde empezar. ¡Ojalá pudiera votarte más! – Jonathan