Clojure / postgresql: Как я могу увидеть исключение, когда ошибка в БД? - PullRequest
18 голосов
/ 16 августа 2011

При использовании clojure с postgresql, всякий раз, когда выдаваемый мной оператор искажается каким-либо образом или иным образом отклоняется самой БД, я получаю что-то вроде следующей ошибки:

java.sql.BatchUpdateException: 
  Batch entry 0 drop schema public cascade was aborted.  
  Call getNextException to see the cause.

Как я могу вызвать getNextException, чтобы я мог видеть, что я сделал не так? Откуда я это называю?

Ответы [ 2 ]

8 голосов
/ 16 августа 2011

См. Ссылку на clojure / jdbc , показывающую, как удалить таблицу с Clojure / JDBC.

Также показано, как обрабатывать ошибки с помощью блока try catch.

В этом блоке try catch вы можете написать что-то похожее на:

(.printStackTrace (.getCause e))
2 голосов
/ 07 февраля 2013

Я использовал следующее для успешного удаления / создания таблиц и получения точной информации об ошибках, когда postgresql расстроен:

(defn drop-table [name]
    (sql/with-connection db
      (with-open [s (.createStatement (sql/connection))]
        (try
          (.addBatch s (str "drop table " name ))
          (seq (.executeBatch s))
          (catch Exception _)))))

(defn setup []
  (comment "TODO: create tables here"))

(defn -main []
  (try
  (print "Dropping table...") (flush)
  (drop-table "table_name")
  (print "Creating database structure...") (flush)
  (setup)
  (println " done")
  (catch Exception e (.getNextException e))))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...