Podczas używania clojure z postgresql, za każdym razem, gdy wydane przeze mnie oświadczenie jest w jakiś sposób zniekształcone lub w inny sposób odrzucone przez samą bazę danych, otrzymuję coś takiego jak następujący błąd:

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

Jak mogę wywołać getNextException, aby zobaczyć, co zrobiłem źle? Skąd mam to wywołać?

19
prismofeverything 16 sierpień 2011, 10:23

2 odpowiedzi

Najlepsza odpowiedź

Zobacz ten link do clojure/jdbc pokazujący, jak usunąć tabelę za pomocą Clojure /JDBC.

Pokazuje również, jak radzić sobie z błędami za pomocą bloku try catch.

Z tego bloku try catch możesz napisać coś podobnego do:

(.printStackTrace (.getCause e))
8
Nicolas Modrzyk 16 sierpień 2011, 11:56
W niektórych przypadkach wywołanie (.getCause e) rzuca NullPointerException, ale (.getNextException e) działa.
 – 
siphiuel
19 maj 2015, 11:49

Użyłem następujących informacji, aby pomyślnie upuścić / utworzyć tabele i uzyskać dokładne informacje o błędach, gdy postgresql się zdenerwuje:

(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))))
3
Paul Drummond 7 luty 2013, 03:01