com.microsoft.sqlserver.jdbc.SQLServerException: 该连接已关闭。
at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.checkClosed(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.createStatement(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.createStatement(Unknown Source)
at task.MyDB.execute(MyDB.java:34)
at task.DBTest.<init>(DBTest.java:9)
at task.DBTest.main(DBTest.java:12)
代码如下:package task;import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;public class MyDB {
private Connection con;
private ResultSet rs;
private int n;
//连接数据库
public Connection getConnection(String driverName, String URL, String userName, String password){
try {
Class.forName(driverName);
con=DriverManager.getConnection(URL, userName, password);
con.close();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return con;
}

/*执行SQL语句,有可能是select、insert、update、delete语句中的任何一个,要对参数sql先进行判断,
再分类处理:如为查询语句,需将结果集中的所有行、列数据显示输出;若是增删改语句,
除执行对应操作外,还要输出“增加(修改、删除)xx条记录”。*/

public void execute(Connection connString, String sql){
try {
Statement st=connString.createStatement();
if(sql.startsWith("select")){
rs=st.executeQuery(sql);
ResultSetMetaData rsmd=rs.getMetaData();
n=rsmd.getColumnCount();
while(rs.next()){
for(int i=1;i<n;i++)
System.out.print(rs.getObject(i)+" ");
}
}else if(sql.startsWith("insert")){
int m=st.executeUpdate(sql);
System.out.println("增加"+m+"条记录。");
}else if(sql.startsWith("update")){
int m=st.executeUpdate(sql);
System.out.println("修改"+m+"条记录。");
}else{
int m=st.executeUpdate(sql);
System.out.println("删除"+m+"条记录。");
}

rs.close();
st.close();
connString.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
package task;import java.sql.Connection;
import java.sql.SQLException;public class DBTest {
MyDB mydb=new MyDB();
public DBTest(String driverName, String URL, String userName, String password,String sql){
Connection conn=mydb.getConnection(driverName, URL, userName, password);
mydb.execute(conn, sql);
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
new DBTest("com.microsoft.sqlserver.jdbc.SQLServerDriver","jdbc:sqlserver://172.16.107.88:1433;DatabaseName=qin;","SQL","SQL","select * from Students");
}}麻烦大家帮帮忙!!!

解决方案 »

  1.   

    楼主要细心在取connection的时候你是将其先关闭后返回的MyDB 的getConnection方法里的代码
    con.close(); 这个有点问题
      

  2.   

    com.microsoft.sqlserver.jdbc.SQLServerException: 该连接已关闭。
    at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(Unknown Source)
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.checkClosed(Unknown Source)
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.createStatement(Unknown Source)
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.createStatement(Unknown Source)
    at task.MyDB.execute(MyDB.java:34)
    at task.DBTest.<init>(DBTest.java:9)还是有此错误
      

  3.   

    把getConnection方法里的conn.close()和execute方法里的connString.close()都注释掉
      

  4.   


    com.microsoft.sqlserver.jdbc.SQLServerException: 该连接已关闭。
    at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(Unknown Source)
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.checkClosed(Unknown Source)
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.createStatement(Unknown Source)
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.createStatement(Unknown Source)
    at task.MyDB.execute(MyDB.java:34)
    at task.DBTest.<init>(DBTest.java:9)
    at task.DBTest.main(DBTest.java:12)
      

  5.   

    package task;import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.ResultSetMetaData;
    import java.sql.SQLException;
    import java.sql.Statement;public class MyDB {
    private Connection con;
    private ResultSet rs;
    private int n;
    //连接数据库
    public Connection getConnection(String driverName, String URL, String userName, String password){
    try {
    Class.forName(driverName);
    con=DriverManager.getConnection(URL, userName, password);
    //con.close();
    } catch (ClassNotFoundException e) {
    e.printStackTrace();
    } catch (SQLException e) {
    e.printStackTrace();
    }
    return con;
    }/*执行SQL语句,有可能是select、insert、update、delete语句中的任何一个,要对参数sql先进行判断,
    再分类处理:如为查询语句,需将结果集中的所有行、列数据显示输出;若是增删改语句,
    除执行对应操作外,还要输出“增加(修改、删除)xx条记录”。*/public void execute(Connection connString, String sql){
    try {
    Statement st=connString.createStatement();
    if(sql.startsWith("select")){
    rs=st.executeQuery(sql);
    ResultSetMetaData rsmd=rs.getMetaData();
    n=rsmd.getColumnCount();
    while(rs.next()){
    for(int i=1;i<n;i++)
    System.out.print(rs.getObject(i)+" ");
    }
    }else if(sql.startsWith("insert")){
    int m=st.executeUpdate(sql);
    System.out.println("增加"+m+"条记录。");
    }else if(sql.startsWith("update")){
    int m=st.executeUpdate(sql);
    System.out.println("修改"+m+"条记录。");
    }else{
    int m=st.executeUpdate(sql);
    System.out.println("删除"+m+"条记录。");
    }rs.close();
    st.close();
    connString.close();
    } catch (SQLException e) {
    e.printStackTrace();
    }
    }
    }