为什么throws exception不行 而try catch行

hippoppower 2009-07-13 04:26:14
一段连接数据库的方法

throws的:

public static Connection getConnection() throws Exception {


Class.forName("com.mysql.jdbc.Driver");
Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3306/test", user, password);
return con;
}


报错
------------------------------------------

try catch的 :
public static Connection getConnection() {
Connection conn=null;
try {
Class.forName("com.mysql.jdbc.Driver");

conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/test", user, password);

} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return conn ;


}

通过

何解 什么原理
...全文
183 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
meixqhi 2009-07-13
  • 打赏
  • 举报
回复
java中能直接throws的异常是要继承throwable,如果那个异常没有继承throwable则不能抛出,一定要捕获
palosky 2009-07-13
  • 打赏
  • 举报
回复
捕获ClassNotFoundException ,SQLException两个异常,只抛出一个Excepiton一场
你想抛出的话 应该也抛出 ClassNotFoundException ,SQLException两个异常


public static Connection getConnection()throws ClassNotFoundException,SQLException{
连接数据库的代码……
}
chinawomen 2009-07-13
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 puhongchun 的回复:]
LZ 你捕获的是 ClassNotFoundException ,SQLException两个异常,你抛出的是Excepiton当然会报错

你想抛出的话 也要这样

public static Connection getConnection() throws ClassNotFoundException,SQLException{


Class.forName("com.mysql.jdbc.Driver");
Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3306/test", user, password);
return con;
}
[/Quote]
二楼的说法完全正确 加10分 顶
arsenal_NO1 2009-07-13
  • 打赏
  • 举报
回复
三楼正解...
zhzhzhhh 2009-07-13
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 hippoppower 的回复:]
引用 1 楼 applerockhool 的回复:
调用connection时候捕获异常了吗?



public List findall() throws Exception {

Connection con=ConnUtil.getConnection();

调用的时候 也throws 了啊


然后在jsp里 List list = dao.findAll();

为什么不行
[/Quote]
这个跟你获得数据库连接的时候毛病是一样的,你自己总是把错误往外抛,却不进行处理,那自然是由Servlet容器或者JVM来处理了,这样就出现你看到的报错情形了呗
hippoppower 2009-07-13
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 puhongchun 的回复:]
LZ 你捕获的是 ClassNotFoundException ,SQLException两个异常,你抛出的是Excepiton当然会报错

你想抛出的话 也要这样

public static Connection getConnection() throws ClassNotFoundException,SQLException{


Class.forName("com.mysql.jdbc.Driver");
Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3306/test", user, password);
return con;
}
[/Quote]


还是报错 为啥不能throw呢
hippoppower 2009-07-13
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 applerockhool 的回复:]
调用connection时候捕获异常了吗?
[/Quote]

public List findall() throws Exception {

Connection con=ConnUtil.getConnection();

调用的时候 也throws 了啊



然后在jsp里 List list = dao.findAll();

为什么不行
wangxlyy 2009-07-13
  • 打赏
  • 举报
回复
throw的时候是由调用者来处理被调用方法所抛出的异常的
believefym 2009-07-13
  • 打赏
  • 举报
回复
如三楼,大概楼主call getConnection的时候没做异常处理吧。。。
believefym 2009-07-13
  • 打赏
  • 举报
回复
都没错。。。
zhzhzhhh 2009-07-13
  • 打赏
  • 举报
回复
public static Connection getConnection() throws Exception

定义了一个方法throws Exception,意味着这个方法内部的一切异常,都由调用者负责捕获并处理-0-而不是说方法定义了一个throws就不用再对异常进行处理了-0-
puhongchun 2009-07-13
  • 打赏
  • 举报
回复
LZ 你捕获的是 ClassNotFoundException ,SQLException两个异常,你抛出的是Excepiton当然会报错

你想抛出的话 也要这样

public static Connection getConnection() throws ClassNotFoundException,SQLException{


Class.forName("com.mysql.jdbc.Driver");
Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3306/test", user, password);
return con;
}
applerockhool 2009-07-13
  • 打赏
  • 举报
回复
调用connection时候捕获异常了吗?

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧