Connection conn= DbUtil.getConnection();
Statement stmt=null;
System.out.println(conn+"&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&");
stmt=conn.createStatement();
System.out.println(conn+"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
ResultSet rs = stmt.executeQuery("select * from exam order by exam_id");
显示为:
com.microsoft.jdbc.sqlserver.SQLServerConnection@161dfb5&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]Object has been closed.
at com.microsoft.jdbc.base.BaseExceptions.createException(Unknown Source)
at com.microsoft.jdbc.base.BaseExceptions.getException(Unknown Source)
at com.microsoft.jdbc.base.BaseConnection.validateClosedState(Unknown Source)
at com.microsoft.jdbc.base.BaseConnection.createStatement(Unknown Source)
at com.microsoft.jdbc.base.BaseConnection.createStatement(Unknown Source)
at com.sdjzglxy.jwMis.dao.ExamDaoImpl.queryExams(ExamDaoImpl.java:87)
at com.sdjzglxy.jwMis.jwMisFrame.JwMisFrame.createQueryPanel(JwMisFrame.java:421)
at com.sdjzglxy.jwMis.jwMisFrame.JwMisFrame.(JwMisFrame.java:96)
at com.sdjzglxy.jwMis.jwMisFrame.JwMisFrame.main(JwMisFrame.java:719)
我觉得问题是这段代码:stmt=conn.createStatement();
因为我打印了conn它并不为null,但是执行stmt=conn.createStatement();却提示数据库已经关闭。我想问一下,究竟该如何解决。
[quote]final public static void colse(ResultSet rs, Statement stmt, Connection conn)throws Exception {
if (conn != null || !conn.isClosed()) {
conn.close();
conn = null;
} else {
if (stmt != null) {
stmt.close();
stmt = null;
} else {
if (rs != null) {
rs.close();
rs = null;
}
}
}
}
}
我的DbUtil是这样写的,帮忙看一下是否正确!谢谢 [/quote]
这样写:
if (rs != null)
{
rs.close(); rs = null;
}
if (stmt != null)
{
stmt.close(); stmt = null;
}
if (conn != null)
{
conn.close(); conn = null;
}
类DbUtil中的conn是static的,其他程序会修改的啊,你把close改成下面看看
[code="java"] if (conn != null || !conn.isClosed()) {
conn.close();
conn = null;
} else {
if (stmt != null) {
stmt.close();
stmt = null;
} else {
if (rs != null) {
rs.close();
rs = null;
}
}
}[/code]
应该与conn,stmt,rs关闭顺序有关,应该先rs.close();然后stmt.close();最后conn.close();
楼上的说的对。
关闭顺序,必须严格按照rset, stmt, conn来。
[code="java"]final public static void colse(ResultSet rs, Statement stmt, Connection conn)throws Exception {
if (rs != null) {
rs.close();
}
if (stmt != null) {
stmt.close();
}
if (conn != null || !conn.isClosed()) {
conn.close();
}
}[/code]
关闭的顺序不正确,应该先关闭resultset,然后是statement,最好才是connection,呵呵。