Clojure/postgresql: Как я вижу исключение, когда ошибка находится в db?
При использовании clojure с postgresql всякий раз, когда высказываемое мной утверждение некорректно или каким-либо образом отвергается самой db, я получаю что-то вроде следующей ошибки:
java.sql.BatchUpdateException:
Batch entry 0 drop schema public cascade was aborted.
Call getNextException to see the cause.
Как я могу вызвать getNextException, чтобы я мог видеть, что я сделал неправильно? Откуда мне это позвонить?
Ответы
Ответ 1
См. ссылку на clojure/jdbc, в которой показано, как удалить таблицу с помощью clojure/JDBC.
Он также показывает, как обрабатывать ошибки с помощью блока catch try.
Внутри этого блока try catch вы можете написать что-то похожее на:
(.printStackTrace (.getCause e))
Ответ 2
Я использовал следующее для успешного удаления/создания таблиц и получения точной информации об ошибках, когда 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))))