8

ClojureJDBCツールを使用してHSQLデータベースにテーブルを作成する小さなClojureプログラムがあります。ただし、実際にテーブルを作成するのは、LeiningenのREPLから実行した場合のみのようです。IDE(IntelliJ)を使用して、またはIDE(IntelliJ)からコードを実行すると、テーブルが作成されませんlein run。報告された例外はありません。どちらの場合も、出力は「(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)"]))))

そして、私はライニンゲンを使用しているので、ここに私の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.logCREATE TABLEます。

ただし、私がそうする場合:

$ rm -rf /tmp/tramway.*
$ lein run
(0)

次に同じファイルをチェックします。空です。、、、およびファイルを作成します。ファイル以外はすべてコンテンツが含まれています。実行されたという記録はありません。.log.properties.script.logCREATE TABLE

私は何が間違っているのですか?REPLから(-main)関数を実行する場合でも、Leiningenに自動的に実行させる場合でも、同じ結果が得られると思います。

また、関数からテーブルの作成を取り出し-mainて、IDEを介してスクリプトとして実行しようとしましたが、それでも同じ悪い結果が得られます。

4

1 に答える 1

7

これは、HSQLDB構成に関する一般的な質問です。

HSQLDBのデフォルト構成は、テストでの使用を目的としたものではありません。その結果、.logエントリの書き込みと同期が500ミリ秒遅れ、接続が閉じられてもデータベースがシャットダウンされません。URLで次の設定のいずれかを試してください。

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

また

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

ここでさまざまなオプションを参照してください:http://hsqldb.org/doc/2.0/guide/dbproperties-chapt.html

于 2012-04-20T10:58:48.490 に答える