急晕了!兄弟姐妹们快来救命啊!不知道为什么数据库连接数目会持续增加! 是这样的,我写了一个同步数据的程序,程序在每间隔一段时间后就会运行,在主类里我只创建了一个到数据库的连接,然后把这个连接传给其他需要连接数据库的各个类及方法,直到shutdown这个应用才去断开连接,可不知道怎么回事在SQLServer的企业管理器中可以看见这个程序连接数据库的数目在不断的增加,请各位帮帮忙,分析一下是什么原因。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 可能是在程序的某个地方跑出了异常,导致连接没有被关闭,然后获取连结的时候又新建了一个/////////////////////////////////////////////////////////////////////////////////如果是那样的话,最好是在finally里close()掉 ,在主类里我只创建了一个到数据库的连接,============用了static了? malligator(不能再整天泡在CSDN里了!) 不是static啊,只是以参数的形式传给其他各个类啊,不过获得的数据库连接是一个static变量,获得数据库连接的类如下:package DBUtil;import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import Configuration.configurations;import DataProcess.Log4J;public class DBCom { static Connection con = null; private static String driver = configurations.loadProperties().getProperty( "DB.DRIVER"); private static String url = configurations.loadProperties().getProperty( "PTSIII.URL"); private static String username = configurations.loadProperties() .getProperty("PTSIII.USER"); private static String password = configurations.loadProperties() .getProperty("PTSIII.PASSWORD"); public static Connection getConnection() { if (con == null) { try { System.out.println("create connection!"); Class.forName(driver).newInstance(); con = DriverManager.getConnection(url, username, password); } catch (SQLException ex) { ex.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } } return con; } public static void conClose(Connection con) { try { if (con != null){ con.close(); con = null; } } catch (SQLException e) { Log4J.debugothers .error("Database Error:Can't disconnect with database."); } finally { try { if (con != null) { con.close(); con = null; } } catch (SQLException e) { Log4J.debugothers .error("Database Error:Can't disconnect with database."); } } } public static void resultSetClose(ResultSet rs) { try { if (rs != null) { rs.close(); rs = null; } } catch (SQLException e) { Log4J.debugcomponent .error("ResultSet can't be closed when load aml data to PTS!"); } } public static void preparedStatementClose(PreparedStatement pstmt) { try { if (pstmt != null) { pstmt.close(); pstmt = null; } } catch (SQLException e) { Log4J.debugcomponent .error("PreparedStatement can't be closed when load aml data to PTS!"); } }} 你的con是static的,为何还要作为参数传到其它类中呢?DBCom.con就能获得对象 public static void conClose(Connection con) {public static void resultSetClose(ResultSet rs) {public static void preparedStatementClose(PreparedStatement pstmt) {这三个里面有一个完不成你想作的事情,时间长了都不太肯定,大概是第2个,不要把RS传出来试图在外面关闭。 线程运行出现的不确定性 ExcelUtils如何控制单元格自适应? 学习JDK开发有没有用啊 Spring+WebWork 整合问题,困扰我半天了!! 字符串转化成与字符串名字一样的类啊,怎么办?朋友在QQ问我 请教:知道路径字符串,如何生成JTree? 如何计算两个日期之间有多少天 寻找JBuilder 5 Enterprise的Serial Number和License Key Java的HTMLConverter 关于数据结构 十万火急!!!大家帮帮我吧!!! 怎么样才能跟踪程序代码的执行?? 谢谢
/////////////////////////////////////////////////////////////////////////////////
如果是那样的话,最好是在finally里close()掉
============
用了static了?
不是static啊,只是以参数的形式传给其他各个类啊,不过获得的数据库连接是一个static变量,获得数据库连接的类如下:
package DBUtil;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import Configuration.configurations;
import DataProcess.Log4J;
public class DBCom {
static Connection con = null;
private static String driver = configurations.loadProperties().getProperty(
"DB.DRIVER"); private static String url = configurations.loadProperties().getProperty(
"PTSIII.URL"); private static String username = configurations.loadProperties()
.getProperty("PTSIII.USER"); private static String password = configurations.loadProperties()
.getProperty("PTSIII.PASSWORD"); public static Connection getConnection() {
if (con == null) {
try {
System.out.println("create connection!");
Class.forName(driver).newInstance();
con = DriverManager.getConnection(url, username, password);
} catch (SQLException ex) {
ex.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
return con;
} public static void conClose(Connection con) {
try {
if (con != null){
con.close();
con = null;
}
} catch (SQLException e) {
Log4J.debugothers
.error("Database Error:Can't disconnect with database.");
} finally {
try {
if (con != null) {
con.close();
con = null;
}
} catch (SQLException e) {
Log4J.debugothers
.error("Database Error:Can't disconnect with database.");
}
} } public static void resultSetClose(ResultSet rs) {
try {
if (rs != null) {
rs.close();
rs = null;
}
} catch (SQLException e) {
Log4J.debugcomponent
.error("ResultSet can't be closed when load aml data to PTS!");
}
} public static void preparedStatementClose(PreparedStatement pstmt) {
try {
if (pstmt != null) {
pstmt.close();
pstmt = null;
}
} catch (SQLException e) {
Log4J.debugcomponent
.error("PreparedStatement can't be closed when load aml data to PTS!");
}
}}
public static void conClose(Connection con) {
public static void resultSetClose(ResultSet rs) {
public static void preparedStatementClose(PreparedStatement pstmt) {这三个里面有一个完不成你想作的事情,时间长了都不太肯定,大概是第2个,不要把RS传出来试图在外面关闭。