作爲客戶端,當我的程序的輸入/輸出發生「不好」事件時,應拋出I/O異常。現在,當我連接到服務器時,我的程序作爲客戶端與上述服務器之間具有輸入輸出關係。因此,如果通信上的某些內容不起作用(某些「不好」),則產生的異常應該是IOException,即SQLException應該擴展IOException。爲什麼SQLException不會擴展IOException?
爲什麼不是這樣?
作爲客戶端,當我的程序的輸入/輸出發生「不好」事件時,應拋出I/O異常。現在,當我連接到服務器時,我的程序作爲客戶端與上述服務器之間具有輸入輸出關係。因此,如果通信上的某些內容不起作用(某些「不好」),則產生的異常應該是IOException,即SQLException應該擴展IOException。爲什麼SQLException不會擴展IOException?
爲什麼不是這樣?
因爲SQLException
並不總是與IO相關。
例如,如果你編寫了一個錯誤的SQL命令,你將有一個SQLException
。
這裏是不相關的IO可能的SQLException的非詳盡列表:
從javadoc:
提供關於數據庫訪問錯誤或其他錯誤信息的異常。
因此,要做到最準確,我們需要多重繼承來指示異常是否是SQL異常和I/O異常,但是我們不能用Java來實現,對吧? – GreenThor
驅動程序是隱藏在客戶端(Java應用程序)和服務器之間的通信中發生的事情的驅動程序。 IOException可能會在較低級別引發,但會被攔截並更改爲SQLException。 –
SQL異常不一定是IO異常(例如連接丟失,讀取超時等)。
錯誤的SQL或違反約束條件也會引發SQL異常。
是什麼讓你認爲任何SQL相關的問題都與IO問題有關? – GhostCat
爲什麼「語法錯誤」是IOException? –