A instrução de criação de tabela jdbc do Clojure não é executada, a menos que seja utilizado o Leiningen REPL
Eu tenho um pequeno programa Clojure que usa oClojure JDBC ferramentas para criar uma tabela em um banco de dados HSQL. No entanto, só parece realmente criar a tabela se eu executá-lo do REPL de Leiningen. Ele não cria a tabela se eu executar o código usandolein run
ou do meu IDE (IntelliJ). Não há exceções relatadas. Em ambos os casos, a saída é apenas "(0)".
Aqui está o trecho 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)"]))))
E já que estou usando Leiningen, aqui está minhaproject.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)
Se eu fizer:
$ lein repl
tramway.core=> (-main)
(0)
nil
e então verifique/tmp/tramway.log
Eu posso ver oCREATE TABLE
executado com sucesso.
No entanto, se eu fizer:
$ rm -rf /tmp/tramway.*
$ lein run
(0)
e, em seguida, verifique o mesmo arquivo, ele está vazio. istofaz criar o.log
, .properties
e.script
arquivos. Todos menos o.log
arquivo tem conteúdo; simplesmente não há registro doCREATE TABLE
tendo sido executado.
O que estou fazendo de errado? Eu esperaria ter o mesmo resultado, quer eu execute minha função (-main) do REPL ou faça o Leiningen executá-la automaticamente.
Eu também tentei tirar a criação da mesa do-main
função e executá-lo apenas como um script através do meu IDE, e eu ainda recebo o mesmo resultado ruim.