kullanılmadığı sürece çalışmaz HSMI veritabanında bir tablo oluşturmak için Clojure JDBC araçlarını kullanan küçük bir Clojure programı var. Ancak, sadece Leiningen'in REPL'sinden çalıştırdığımda tabloyu oluşturuyor gibi görünüyor. lein run
veya IDE (IntelliJ) kullanarak kodu çalıştırırsam tablo oluşturmaz. Bildirilen istisnalar yoktur. Her iki durumda da, çıkış sadece "(0)" dır. İşte Clojure jdbc create-table deyimi, Leiningen REPL
(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)"]))))
Ve Leiningen kullanıyorum, çünkü burada benim project.clj
var:
(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)
Yaparsam: o zaman
$ lein repl
tramway.core=> (-main)
(0)
nil
ve /tmp/tramway.log
kontrol CREATE TABLE
başarıyla yürütüldüğünü görebiliyorum. Yaparsam
Ancak:
$ rm -rf /tmp/tramway.*
$ lein run
(0)
ve daha sonra aynı dosyayı kontrol, bu boş. ,, .log
, .properties
ve .script
dosyalarını oluşturur. Tüm .log
dosyasında içerik var; Çalışmakta olan CREATE TABLE
'un sadece bir kaydı yok.
Neyi yanlış yapıyorum? REPL'den (-main) işlevimi çalıştırdığımda veya Leiningen'in otomatik olarak çalıştırıp çalıştırmadığımı aynı sonuca sahip olmasını beklerim.
Ayrıca, tablo oluşturma işlemini -main
işlevinden alıp IDE aracılığıyla bir komut dosyası olarak çalıştırmayı denedim ve hala aynı kötü sonucu elde ediyorum.
. Teşekkür ederim! HSQLDB ve ayrıca Clojure'a ilk adımı atıyorum, bu yüzden nereden başlayacağımı bilmiyordum. Keşke daha fazlasını yapabilirdim! – Jonathan