2011-08-16 6 views
16

PostgreSQL, जब भी एक बयान जारी कर रहा db ही मैं निम्न त्रुटि की तरह कुछ पाने से किसी तरह से विकृत या अन्यथा अस्वीकार कर दिया है साथ clojure का उपयोग करते समय:क्लोजर/पोस्टग्रेस्क्ल: डीबी में त्रुटि होने पर मैं अपवाद कैसे देखूं?

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

मैं getNextException कैसे फोन ताकि मैं देख सकता हूँ कर सकते हैं मैंने क्या ग़लत किया था? मैं इसे कहां कहूं?

उत्तर

6

यह link on clojure/jdbc देखें जो क्लोजर/जेडीबीसी के साथ एक टेबल को कैसे छोड़ें।

यह आपको यह भी दिखाता है कि एक कोशिश पकड़ ब्लॉक के साथ त्रुटियों को कैसे संभालना है।

कि कोशिश पकड़ ब्लॉक के भीतर से

, आप के लिए कुछ इसी तरह लिख सकते हैं:

(.printStackTrace (.getCause e)) 
+0

कुछ मामलों में '(.getCause e) 'का आह्वान करने में' NullPointerException' फेंकता है, लेकिन '(.getNextException e)' काम करता है। – siphiuel

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)))) 
संबंधित मुद्दे