高分求大虾相助!!一个看上去并不难的问题--数据库异常的处理问题。成功解决分全送,请大虾进来说话,不胜感激!!
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)
奇怪吧!?
如果不用屏蔽的那一段代码,就没问题!!
这是为什么呢?如何解决??
请大虾指点!!