锁定老帖子 主题:一个常见的JDBC封装导致的问题
精华帖 (0) :: 良好帖 (0) :: 新手帖 (11) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2011-05-16
悲剧了 写道 jinyao 写道 你是把connection关闭了 而不是置空
finally{ con=null; } 最后有句这个代码 这代码写的,,哎,不要修改参数,这是一个不好的习惯,再说,参数只是一个形式参数,不会对实际参数产生变化。这个不是C指针! |
|
返回顶楼 | |
发表时间:2011-05-16
sswh 写道 代码真够混乱的。 本来不想回了,算了,还是说一下吧。 悲剧了 写道 public class ConnectionUtil { private static Connection instance=null; } 这儿:instance是ConnectionUtil 类的静态变量。 悲剧了 写道 public static void close(Connection con){ if(con!=null){ try { con.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ con=null; } } } } 这儿:close()方法中,置空的con=null,是方法参数。ConnectionUtil.instance 并没有受到影响。 这位朋友正解,你应该这样用finally{ ConnectionUtil.instance =null; } ,但是如此非常怀疑你用单例模式的必要性 |
|
返回顶楼 | |
发表时间:2011-05-16
sswh 写道 代码真够混乱的。 本来不想回了,算了,还是说一下吧。 悲剧了 写道 public class ConnectionUtil { private static Connection instance=null; } 这儿:instance是ConnectionUtil 类的静态变量。 悲剧了 写道 public static void close(Connection con){ if(con!=null){ try { con.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ con=null; } } } } 这儿:close()方法中,置空的con=null,是方法参数。ConnectionUtil.instance 并没有受到影响。 调用的时候close(instance ) |
|
返回顶楼 | |
发表时间:2011-05-16
close()中还要加一句instance = null;
|
|
返回顶楼 | |
发表时间:2011-05-16
mercyblitz 写道 悲剧了 写道 jinyao 写道 你是把connection关闭了 而不是置空
finally{ con=null; } 最后有句这个代码 这代码写的,,哎,不要修改参数,这是一个不好的习惯,再说,参数只是一个形式参数,不会对实际参数产生变化。这个不是C指针! 这样写是为了保证con没有被关闭,最终强制把他赋值为null |
|
返回顶楼 | |
发表时间:2011-05-16
gaosheng08 写道 close()中还要加一句instance = null;
调用的时候传进来的就是instance ,这个connection是通过这个类的getConnection()得到的 |
|
返回顶楼 | |
发表时间:2011-05-16
悲剧了 写道 jinyao 写道 你这是单例,下次调用connection的时候当然不为空
是单例,但是调用关闭方法,把instance关闭了的,就是单例里面instance为null了,那么它会再次new一次 关闭方法中只是把数据库rs、ps、conn关闭了,但instance并不为null,要显示将instance置为null |
|
返回顶楼 | |
发表时间:2011-05-16
悲剧了 写道 gaosheng08 写道 close()中还要加一句instance = null;
调用的时候传进来的就是instance ,这个connection是通过这个类的getConnection()得到的 lz你难道不知道java通过close方法传递进去的instance只是个引用吗,真正的instance是不会置为null的?? |
|
返回顶楼 | |
发表时间:2011-05-16
gaosheng08 写道 悲剧了 写道 jinyao 写道 你这是单例,下次调用connection的时候当然不为空
是单例,但是调用关闭方法,把instance关闭了的,就是单例里面instance为null了,那么它会再次new一次 关闭方法中只是把数据库rs、ps、conn关闭了,但instance并不为null,要显示将instance置为null 那个close(0方法中的conn就是getConnection()得到的intance,里面已经con=null显示关闭了 |
|
返回顶楼 | |
发表时间:2011-05-16
悲剧了 写道 mercyblitz 写道 悲剧了 写道 jinyao 写道 你是把connection关闭了 而不是置空
finally{ con=null; } 最后有句这个代码 这代码写的,,哎,不要修改参数,这是一个不好的习惯,再说,参数只是一个形式参数,不会对实际参数产生变化。这个不是C指针! 这样写是为了保证con没有被关闭,最终强制把他赋值为null 看来楼主不太明白,编译器工作原理呀~ 你自己想象,一个Connection够吗?建议看一下Connection Pool的原理,Apache DBCP就是简单的实现。 |
|
返回顶楼 | |