请教各位我在javabean里有一个类里写了个关闭连接的函数public void Close() {
try {
stmt.close();
conn.close();
if (conn.isClosed()) {
System.out.println("已关闭");
}
else {
System.out.println("未关闭");
}
}
catch (SQLException e) {
e.printStackTrace();
}
}每次运行打印的都是已关闭但是我在cmd下用netstat -an后还是发现大量的127.0.0.1连接,请问这是怎么回事?
try {
stmt.close();
conn.close();
if (conn.isClosed()) {
System.out.println("已关闭");
}
else {
System.out.println("未关闭");
}
}
catch (SQLException e) {
e.printStackTrace();
}
}每次运行打印的都是已关闭但是我在cmd下用netstat -an后还是发现大量的127.0.0.1连接,请问这是怎么回事?
解决方案 »
- 求教一段ajax重构的代码
- 下载的MyEclipse工程里有个Restaurant.mdf,和Restaurant_log.ldf 文件如何让它和工程连在一起使用?
- 选课系统中遇到的问题
- wap的中文乱码问题怎么解决
- 贡献 对数据库中数据 构造为树结构的代码。写的很仓促,希望大家多多提意见!来者有分哟
- 凌云论坛的test.jsp出错 为什么[急 在线等]
- JAVA WEB相关问题
- 关于javabean的两个问题
- 怎样才能不让用户选定网页上的内容?
- jsp 编写时出现不能载入,希望大家能帮我看看
- JSP显示分类问题??????
- 網頁如何壓下確認鍵後會將值傳送給JAVA程式並且執行它在將它顯示在新網頁上
...........................
很多这种链接
类库中的close()方法也是根据对象不同的.
import java.sql.Connection;
import java.sql.Statement;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.ArrayList;public class DataLink {
private Connection conn;
private ResultSet rs = null;
private Statement stmt;
private ArrayList list;
private int i;
private boolean bool = false;
private String back = "";
private String user = "aaa";
private String pass = "aaa"; public DataLink() {
try {
Class.forName("com.mysql.jdbc.Driver").newInstance();
}
catch (ClassNotFoundException classnotfoundexception) {
System.err.println("error: " + classnotfoundexception.getMessage());
}
catch (Exception ex) {
System.err.println("error: " + ex.getMessage());
}
try {
conn = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/aaa?useUnicode=true&characterEncoding=GBK",
user, pass);
stmt = conn.createStatement();
}
catch (SQLException e) {
e.printStackTrace();
}
} public String executeUpdate(String sql) {
rs = null;
back = "";
try {
stmt.executeUpdate(sql);
}
catch (SQLException ex) {
ex.printStackTrace();
back = ex.toString();
} return back;
} public void Close() {
try {
stmt.close();
conn.close();
if (conn.isClosed()) {
System.out.println("已关闭");
}
else {
System.out.println("未关闭");
}
}
catch (SQLException e) {
e.printStackTrace();
}
}
}web页面请求调用executeUpdate执行更新,在没有操作后执行由jsp页面调用Close()
tcp 127.0.0.1:1088 127.0.0.1:3306 established 表示已经连接过了,并不能说明此连接没有关闭吧
如果在运行期间停掉mysql,显示如下127.0.0.1:1088 127.0.0.1:3306 Close_wait
...........
显示关闭中
另外说几点题外的问题:
第一,Close()方法名首字母大写问题.格式是应该注意的.
第二,方法封装不好,为了重用性,需要把方法的各种功能分开来,同一种的功能,我们使用方法重载进行封装.
package ediam.data; import java.sql.ResultSet;
import java.sql.Connection;
import java.sql.Statement;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.ArrayList; public class DataLink {
private Connection conn;
private ResultSet rs = null;
private Statement stmt;
private ArrayList list;
private int i;
private boolean bool = false;
private String back = "";
private String user = "aaa";
private String pass = "aaa"; public DataLink() {
try {
Class.forName("com.mysql.jdbc.Driver").newInstance();
}
catch (ClassNotFoundException classnotfoundexception) {
System.err.println("error: " + classnotfoundexception.getMessage());
}
catch (Exception ex) {
System.err.println("error: " + ex.getMessage());
}
try {
conn = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/aaa?useUnicode=true&characterEncoding=GBK",
user, pass);
stmt = conn.createStatement();
}
catch (SQLException e) {
e.printStackTrace();
}
} public String executeUpdate(String sql) {
rs = null;
back = "";
try {
stmt.executeUpdate(sql);
}
catch (SQLException ex) {
ex.printStackTrace();
back = ex.toString();
} finally {
close(rs);
close(stmt);
close(conn);
}
return back;
} public void close(ResultSet rs) throws Exception {
if(rs == null) rs.close();
} public void close(Statement stmt) throws Exception {
if(stmt == null) stmt.close();
}
public void close(Connection conn) throws Exception {
if(conn == null) conn.close();
}
}
这方面看看socket api.
调用Close是由jsp页面通过jsp:useBean来执行的关闭,如果按照您那样写,会不会出现每调用一次update函数就会新关闭一次连接?而一个jsp页面内可能反复执行多个操作,那就会关闭很多次?
我观察过cmd窗口的变化,每执行一个jsp页面的时候会出现10个左右这样的链接,如果打开的页面多,连接也随之增多,而且并不会隔一段时间自动消失(我观察了一个20多分钟仍然存在)那么可能就会有这样一种情况,当客户端访问数量多的时候,就会不停的在cmd里出现这些,不停?