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:
<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>
E já que estou usando Leiningen, aqui está minhaproject.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>
Se eu fizer:
<code>$ lein repl tramway.core=> (-main) (0) nil </code>
e então verifique/tmp/tramway.log
Eu posso ver oCREATE TABLE
executado com sucesso.
No entanto, se eu fizer:
<code>$ rm -rf /tmp/tramway.* $ lein run (0) </code>
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.