关于JDBC中No operations allowed after connection closed的有关问题

关于JDBC中No operations allowed after connection closed的问题Java codepublic static Operater check(

关于JDBC中No operations allowed after connection closed的问题

Java code
public static Operater check(String name, String password) {        Operater operater=new Operater();//操作员信息对象        String sql = "select *  from tb_operator where name='" + name                + "' and password='" + password + "'and admin=1";//查询字符串        ResultSet rs = Dao.executeQuery(sql);//执行查询        try {            while (rs.next()) {//如果查询到了记录                operater.setId(rs.getString("id"));//设置操作员编号                operater.setName(rs.getString("name"));//设置操作员用户名                operater.setGrade(rs.getString("admin"));//设置操作员等级                operater.setPassword(rs.getString("password"));//设置管理员密码            }        } catch (Exception e) {            e.printStackTrace();        }        Dao.close();    //关闭连接对象        return operater;//返回操作员信息对象    }


第一次调用此方法没问题 可第二次就出现下面的问题

com.mysql.jdbc.exceptions.MySQLNonTransientConnectionException: 
No operations allowed after connection closed

这个问题怎么解决啊 只有把Dao.close();这个关闭Connection的方法去掉,可是这样好像也不对啊?
各位有没有碰到过类似的问题,有好的解决办法?

[解决办法]
原因很简单。在对数据库操作结束后关闭连接是正确的做法,没什么大问题。至于出现:No operations allowed after connection closed。这样的问题原因只有一个,你这里和数据库的连接Connection是一个Static的,程序共享这一个Connection。所以第一次对数据库操作没问题,当把Connection关闭后,第二次还想操作数据库时Connection肯定不存在了。
[解决办法]
try this:

if(conn==null) new Dao();
===>>>>>
if(conn == null || conn.isClosed()) new Dao();

=================================================
题外话

楼主的DAO类写得不怎么合理,其实DAO模式不是提供静态方法,而是使用实例方法

dao 中的 Connection conn 是静态的。楼主这样做如果是开发 AWT/Swing 类型的系统可能问题不大,但是如果是写jsp/servlet 这类网站这种多线程系统,一定会出问题。