Tôi đã có một chương trình Clojure nhỏ sử dụng các công cụ Clojure JDBC để tạo một bảng trong cơ sở dữ liệu HSQL. Tuy nhiên, nó dường như chỉ thực sự tạo ra bảng nếu tôi chạy nó từ REPL của Leiningen. Nó không tạo bảng nếu tôi chạy mã sử dụng lein run
hoặc từ IDE của tôi (IntelliJ). Không có trường hợp ngoại lệ nào được báo cáo. Trong cả hai trường hợp, đầu ra chỉ là "(0)".Clojure jdbc tạo bảng tuyên bố không chạy trừ khi sử dụng Leiningen REPL
Dưới đây là đoạn mã:
(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)"]))))
Và kể từ khi tôi đang sử dụng Leiningen, đây là tôi 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)
Nếu tôi làm:
$ lein repl
tramway.core=> (-main)
(0)
nil
và sau đó kiểm tra /tmp/tramway.log
Tôi có thể xem thành công CREATE TABLE
.
Tuy nhiên, nếu tôi làm:
$ rm -rf /tmp/tramway.*
$ lein run
(0)
và sau đó kiểm tra cùng một tập tin, nó là sản phẩm nào. Nó không tạo các tệp .log
, .properties
và .script
. Tất cả trừ tệp .log
có nội dung; chỉ có không có hồ sơ của CREATE TABLE
đã được chạy.
Tôi đang làm gì sai? Tôi sẽ mong đợi để có kết quả tương tự cho dù tôi chạy chức năng (-main) của tôi từ REPL hoặc có Leiningen chạy nó tự động.
Tôi cũng đã thử thực hiện việc tạo bảng từ chức năng -main
và chạy nó như một tập lệnh thông qua IDE của tôi, và tôi vẫn nhận được kết quả xấu như vậy.
Điều đó đã làm nó. Cảm ơn bạn! Đó là bước đột phá đầu tiên của tôi vào HSQLDB và cũng là Clojure, vì vậy tôi không biết bắt đầu từ đâu. Chúc tôi có thể upvote bạn nhiều hơn nữa! – Jonathan