У меня есть небольшая программа Clojure, которая использует инструменты Clojure JDBC для создания таблицы в базе данных HSQL. Однако кажется, что на самом деле таблица создается только в том случае, если я запускаю ее из REPL Лейнингена. Таблица не создается, если я запускаю код с помощью lein run
или из моей IDE (IntelliJ). Об исключениях не сообщается. В обоих случаях выводится просто «(0)».
Вот фрагмент кода:
(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)"]))))
И поскольку я использую Leiningen, вот мой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)
Если я сделаю :
$ lein repl
tramway.core=> (-main)
(0)
nil
, а затем проверю /tmp/tramway.log
, я увижу, что CREATE TABLE
выполнено успешно.
Однако, если я выполню:
$ rm -rf /tmp/tramway.*
$ lein run
(0)
и затем проверю тот же файл, он окажется пустым. Он действительно создает файлы .log
, .properties
и .script
. Все файлы, кроме .log
, имеют содержимое; просто нет записей о запуске CREATE TABLE
.
Что я делаю не так? Я ожидаю, что получу тот же результат, независимо от того, запускаю ли я свою функцию (-main)из REPL или пусть Leiningen запускает ее автоматически.
Я также попытался вывести создание таблицы из функции -main
и запустить ее как скрипт через свою IDE, но все равно получаю тот же плохой результат.