2012-04-19 6 views
7

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

kod snippet'ine:

(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.

cevap

7

Bu, yaygın bir HSQLDB yapılandırma sorusudur.

HSQLDB'nin varsayılan yapılandırması, sınama kullanımı için uygun değildir. Sonuç olarak, .log girişlerini 500 milisaniye yazarak ve eşzamanlamayı geciktirir ve bağlantı kapatıldığında veritabanını kapatmaz. URL'nizdeki bu ayarlardan birini deneyin:

:subname "file:/tmp/tramwaydb;hsqldb.write_delay=false" 

veya

:subname "file:/tmp/tramwaydb;shutdown=true" 

burada çeşitli seçeneği bakınız: did it http://hsqldb.org/doc/2.0/guide/dbproperties-chapt.html

+0

. 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