Подтвердить что ты не робот

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, чтобы я мог видеть, что я сделал неправильно? Откуда мне это позвонить?

4b9b3361

Ответ 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))))