Clojure:如何从clojure / leiningen项目访问SQLException?

时间:2011-08-20 20:22:15

标签: sql exception clojure

我有一个来自clojure的sql异常,如下所示:

java.lang.Exception: transaction rolled back: 
  Batch entry 0 drop database triface was aborted.  
Call getNextException to see the cause.

我想对收到的异常调用getNextException:

(require [clojure.contrib.sql :as sql])

(try 
  (db/rebuild-table) ;; function causing the exception
  (catch Exception e (.getNextException e)))

但后来我明白了:

java.lang.IllegalArgumentException: No matching field found: 
  getNextException for class java.lang.Exception

所以我假设我想要捕获一个SQLException:

(catch SQLException e (.getNextException e)))

除了我找不到如何要求这门课程。它似乎不是由clojure.contrib.sql或clojure.contrib.sql.internal提供的。 javadocs说它在java.sql中,但我该如何要求?

谢谢!

1 个答案:

答案 0 :(得分:2)

您不需要它,导入它,

(import java.sql.SQLException)

但即使你捕获一个Exception,只要它是一个SQLException你应该能够调用getNextException


(let [up (SQLException. "throw")]
  (try
    (throw up)
    (catch Exception e (isa? (type e) SQLException))))