Topic: DAO接口函数是否应该抛出SQLException ?

  Print this page

1.DAO接口函数是否应该抛出SQLException ? Copy to clipboard
Posted by: cknight
Posted on: 2003-12-19 22:11

DAO接口函数是否应该抛出SQLException ?

我以前的做法都是抛出SQLException,
现在又想了想,觉得SQLException都是客户端、DAO调用者所无法解决的异常,
应该说都是底层程序错误的异常。

看到一篇文章中说
客户端无法解决
按理应该抛出unchecked异常

public void dataAccessCode(){
try{
..some code that throws SQLException
}catch(SQLException ex){
throw new RuntimeException(ex);
}
}

这样可以避免让客户端强制处理这些底层异常。

请问个位,你们的DAO是否都只是抛出自己定义的checked异常呢?

2.Re:DAO接口函数是否应该抛出SQLException ? [Re: cknight] Copy to clipboard
Posted by: floater
Posted on: 2003-12-19 23:06

No.

Yes.

Good thinking.

3.Re:DAO接口函数是否应该抛出SQLException ? [Re: cknight] Copy to clipboard
Posted by: why
Posted on: 2003-12-19 23:29

cknight wrote:
DAO接口函数是否应该抛出SQLException ?

请问个位,你们的DAO是否都只是抛出自己定义的checked异常呢?

To be honest, I'm not 100% sure why not.
but Yes, 只是抛出自己定义的checked异常

4.Re:DAO接口函数是否应该抛出SQLException ? [Re: cknight] Copy to clipboard
Posted by: jbwang
Posted on: 2003-12-20 15:29

最接近客户端的抛出业务异常,

最接近底层的抛出原有异常

或者 contract 契约编程,是这么写的吧?

5.Re:DAO接口函数是否应该抛出SQLException ? [Re: cknight] Copy to clipboard
Posted by: javait
Posted on: 2003-12-20 23:51

这是困扰许多人的问题。

答案是:

DAO 抛出异常的原则:

1。DAO 方法应该抛出有意义的异常。

2。DAO 方法不应该抛出 java.lang.Exception。java.lang.Exception 太一般化了。它不传递关于底层问题的任何信息。

3。DAO 方法不应该抛出 java.sql.SQLException。SQLException 是一个低级别的 JDBC 异常。一个 DAO 应该力争封装 JDBC 而不是将 JDBC 公开给应用程序的其余部分。

4。只有在可以合理地预期调用者可以处理异常时,DAO 接口中的方法才应该抛出检查过的异常。如果调用者不能以有意义的方式处理这个异常,那么考虑抛出一个未检查的(运行时)异常。

5。如果数据访问代码捕获了一个异常,不要忽略它。忽略捕获的异常的 DAO 是很难进行故障诊断的。

6。使用链接的异常将低级别的异常转化为高级别的异常。

7。考虑定义标准 DAO 异常类。Spring Framework (参阅参考资料)提供了很好的一套预定义的 DAO 异常类。

详见我的帖子 http://www.cjsdn.com/post/view?bid=2&id=71505&sty=1&tpg=2&age=0

谢谢!SmileSmile
-JAVAIT

6.Re:DAO接口函数是否应该抛出SQLException ? [Re: cknight] Copy to clipboard
Posted by: cknight
Posted on: 2003-12-21 02:14

嗯,对,有道理。原来抛出的SQLException使得调用者必须捕获这个异常。
实际上这样的捕获对于调用者是无能为力,也是没有多大意义的。
同时这样也使得他们之间形成了紧耦合,确实不好。

谢谢javait 的文章,
Cool

7.Re:DAO接口函数是否应该抛出SQLException ? [Re: cknight] Copy to clipboard
Posted by: cknight
Posted on: 2003-12-21 04:55

关于异常处理,也看到一篇不错的文章,推荐一下

Best Practices for Exception Handling

http://www.onjava.com/pub/a/onjava/2003/11/19/exceptions.html

8.Re:DAO接口函数是否应该抛出SQLException ? [Re: cknight] Copy to clipboard
Posted by: hitaco
Posted on: 2003-12-22 10:08

DAO未必一定要用relational数据库实现,所以SQLException....


   Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent
Copyright © 2002-2021 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号-1
客服电话 18559299278    客服信箱 714923@qq.com    客服QQ 714923