2011-08-16 8 views
16

Al utilizar clojure con PostgreSQL, siempre que sea una declaración expido está mal formado de alguna manera o de otra manera rechazado por el propio recibo algo así como el siguiente error db:Clojure/postgresql: ¿Cómo veo la excepción cuando hay un error en la base de datos?

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

¿Cómo puedo llamar getNextException por lo que puedo ver ¿que hice mal? ¿De dónde lo llamo?

Respuesta

6

Consulte este link on clojure/jdbc que muestra cómo colocar una tabla con Clojure/JDBC.

También le muestra cómo manejar los errores con un bloque try catch.

Desde dentro de ese bloque intento de captura, se puede escribir algo similar a:

(.printStackTrace (.getCause e)) 
+0

En algunos casos, la invocación de '(.getCause e)' arroja una 'NullPointerException', pero' (.getNextException e) 'funciona. – siphiuel

2

He utilizado el siguiente para soltar/crear tablas con éxito y para obtener información de error exacto cuando PostgreSQL se molesta:

(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)))) 
Cuestiones relacionadas