是这样的,我写了一个同步数据的程序,程序在每间隔一段时间后就会运行,在主类里我只创建了一个到数据库的连接,然后把这个连接传给其他需要连接数据库的各个类及方法,直到shutdown这个应用才去断开连接,可不知道怎么回事在SQLServer的企业管理器中可以看见这个程序连接数据库的数目在不断的增加,请各位帮帮忙,分析一下是什么原因。

解决方案 »

  1.   

    可能是在程序的某个地方跑出了异常,导致连接没有被关闭,然后获取连结的时候又新建了一个
    /////////////////////////////////////////////////////////////////////////////////
    如果是那样的话,最好是在finally里close()掉
      

  2.   

    ,在主类里我只创建了一个到数据库的连接,
    ============
    用了static了?
      

  3.   

    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!");
    }
    }}
      

  4.   

    你的con是static的,为何还要作为参数传到其它类中呢?DBCom.con就能获得对象
      

  5.   


    public static void conClose(Connection con) {
    public static void resultSetClose(ResultSet rs) {
    public static void preparedStatementClose(PreparedStatement pstmt) {这三个里面有一个完不成你想作的事情,时间长了都不太肯定,大概是第2个,不要把RS传出来试图在外面关闭。