高分求大虾相助!!一个看上去并不难的问题--数据库异常的处理问题。成功解决分全送,请大虾进来说话,不胜感激!!

iceman09 2003-09-23 04:15:32
public class DbUtils {
DbConn con = new DbConn();
Connection conn = con.getConnection();
Statement stmt = null;
ResultSet rs = null;
ResultSetMetaData rsmd = null;

public Vector getSelect(String sql) {
boolean result = true;
Vector ret = new Vector();
try {
stmt = conn.createStatement(
ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_READ_ONLY);
rs = stmt.executeQuery(sql);
rsmd = rs.getMetaData();
int num = rsmd.getColumnCount();
for (; rs.next(); ) {
Object[] obj = new Object[num];
for (int i = 0; i < num; i++) {
obj[i] = rs.getObject(i + 1);
}
ret.add(obj);
}
rs.close();
stmt.close();
conn.close();
}
catch (Exception e) {
System.out.println(e.toString());
e.printStackTrace(System.err);
result = false;
}
/** finally {
try {
if (rs != null) {
rs.close();
}
if (stmt != null) {
stmt.close();
}
if (conn != null) {
conn.close();
}
}
catch (SQLException sex) {
System.out.println(sex.toString());
sex.printStackTrace(System.err);
}
}**/
if (result == true) {
return ret;
}
else {
ret = null;
return ret;
}
}
}
这是我操作数据库的一部分代码,请注意我屏蔽掉的那一部分代码,那时我为了保证数据库操作出现异常时,保证数据库连接正常关闭的语句,但是奇怪的是,我只要把屏蔽去掉,就会出现以下异常:
java.sql.SQLException: Connection has already been closed.

at weblogic.jdbc.pool.Connection.checkIfClosed(Connection.java:65)

at weblogic.jdbc.pool.Statement.close(Statement.java:119)

at weblogic.jdbc.rmi.internal.StatementImpl.close(StatementImpl.java:99)

at weblogic.jdbc.rmi.SerialStatement.close(SerialStatement.java:127)java.sql.SQLException: Connection has already been closed.



at weblogic.jdbc.rmi.SerialStatement.close(SerialStatement.java:117)

at board.DbUtils.getSection(DbUtils.java:102)

at board.MessageBoard.getQuestions(MessageBoard.java:134)

at board.MessageBoard.getAnswered(MessageBoard.java:167)

at jsp_servlet.__question_list._jspService(__question_list.java:116)

at weblogic.servlet.jsp.JspBase.service(JspBase.java:27)

at weblogic.servlet.internal.ServletStubImpl$ServletInvocationAction.run(ServletStubImpl.java:945)

at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:332)

at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:376)

at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:242)

at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:5363)

at weblogic.security.service.SecurityServiceManager.runAs(SecurityServiceManager.java:721)

at weblogic.servlet.internal.WebAppServletContext.invokeServlet(WebAppServletContext.java:3043)

at weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestImpl.java:2466)

at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:152)

at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:133)

奇怪吧!?
如果不用屏蔽的那一段代码,就没问题!!
这是为什么呢?如何解决??
请大虾指点!!
...全文
84 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
spiritsl 2003-09-23
  • 打赏
  • 举报
回复
你在try 中 rs.close(); stmt.close(); conn.close();
已经关掉了,在finally中如果试图再次关闭,就会出现你提到的错误信息。
解决办法就是在try中将关闭语句去掉。保留finally。
139129 2003-09-23
  • 打赏
  • 举报
回复
Connection被你close了两次,第二次当然会报错。
把第一次的三个close去掉.
ejbcreate 2003-09-23
  • 打赏
  • 举报
回复
用Connection 的isClosed() 方法来判断它是否已经关闭。

81,092

社区成员

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

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