我們曾經在(Java)域邏輯中有一個約束,如果一個物體已經存在,它會阻止一個物體(foo,task_id)被插入到表中。然后我們拋出了一個可以被監聽的特定例外。entity_atask_id
現在我們將該邏輯移到它應該在的資料庫中:
ALTER TABLE report ADD CONSTRAINT task_id_unique UNIQUE (task_id);
現在我仍然想拋出和之前一樣的例外,但是我需要識別資料庫層拋出的特定例外情況才能做到這一點。有沒有一種穩定的方法可以識別命名約束?它最好不依賴于服務器上設定的語言,因為它可能會有所不同,而且我也知道錯誤訊息從一個 Postgres 版本到另一個版本是不同的。
我們專門使用非常接近底層 JDBC 級別的Jdbi,因此獲取任何細節都應該沒問題。
uj5u.com熱心網友回復:
您可以將java.sql.SQLException轉換為org.postgresql.util.PSQLException. 然后你可以呼叫該方法getServerErrorMessage()來獲取一個org.postgresql.util.ServerErrorMessage. 然后呼叫該方法getConstraint()獲取約束的名稱。檢查 SQLSTATE 以確保它確實違反了約束。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/485080.html
標籤:爪哇 PostgreSQL 例外 数据库 数据库
上一篇:在陣列中查找max和min的索引
