Clojure/PostgreSQL:当数据库中出现错误时,如何看待异常?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (36)

当使用clojure和postgresql时,无论何时我发出的语句以某种方式格式错误或被数据库本身拒绝,我会得到如下错误:

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

我怎样才能调用getNextException,以便我可以看到我做错了什么?

提问于
用户回答回答于

看这个关于Clojure/JDBC的链接演示如何使用Clojure/JDBC删除表。

它还向你展示了如何使用TRY CATCH块处理错误。

在这个try CATCH块中,可以编写类似于:

(.printStackTrace (.getCause e))
用户回答回答于

我使用以下方法成功地删除/创建了表,并在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))))

扫码关注云+社区