Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JDBC连接问题_Java_Jdbc_Connection - Fatal编程技术网

Java JDBC连接问题

Java JDBC连接问题,java,jdbc,connection,Java,Jdbc,Connection,我已经在Java应用程序中创建了一个getDBConnection方法。这将返回一个连接对象,因此我没有在这个方法中关闭这个连接 现在,我定期从应用程序中的各种方法调用此方法,并在try-finally块中关闭它们。我认为这应该释放连接后使用。但是,我看到MySQL管理员的服务器连接选项卡中打开了大量连接(大约50个) //Defining a method to retrieve a database connection // PropDemo is a properties class t

我已经在Java应用程序中创建了一个getDBConnection方法。这将返回一个连接对象,因此我没有在这个方法中关闭这个连接

现在,我定期从应用程序中的各种方法调用此方法,并在try-finally块中关闭它们。我认为这应该释放连接后使用。但是,我看到MySQL管理员的服务器连接选项卡中打开了大量连接(大约50个)

//Defining a method to retrieve a database connection
// PropDemo is a properties class that retrieves Database related values from a file
public Connection getDBConnection() {

    //Instantiating the Properties object
    PropDemo prop = new PropDemo();
    Connection con = null;

    // Retrieving values from the parameters.properties file
    String JdbcDriver = prop.getMessage("JdbcDriver");
    String JdbcUrlPrefix = prop.getMessage("JdbcUrlPrefix");
    String DBIP = prop.getMessage("DBIP");
    String DBName = prop.getMessage("DBName");
    String DBUser = prop.getMessage("DBUser");
    String DBPassword = prop.getMessage("DBPassword");

    try {

        // Loading and instantiating the JDBC MySQL connector driver class
        Class.forName(JdbcDriver).newInstance();
        con = DriverManager.getConnection(JdbcUrlPrefix + DBIP + "/" + DBName, DBUser, DBPassword);


          if (con.isClosed())
                    Logger.log("Connection cannot be established", "vm");

    } catch (Exception e) {
        Logger.log("Exception: " + e, "vm");
        Logger.log(Logger.stack2string(e), "vm");
    }
    return con;

}
我还将关闭关联的ResultSet和Statement对象。这里可能缺少什么

出于效率和安全考虑,我计划用准备好的报表替换所有报表。这会有很大帮助吗?还可以做些什么

编辑:
这只是一个核心java应用程序,它通过MySQL JDBC连接器反复查询MySQL数据库中某些字段的更改。我没有使用任何像Spring或Hibernate这样的框架

应用程序关闭时是否也关闭连接对象?

应用程序关闭时是否也关闭连接对象?

您是在J2EE应用程序服务器中使用JDBC连接还是在Hibernate中使用JDBC连接? 这两种方法都倾向于从一个相当高的连接池开始,因此您会看到大量的连接池


查看有关连接池的详细信息

您是在J2EE应用服务器中使用JDBC连接,还是与Hibernate一起使用? 这两种方法都倾向于从一个相当高的连接池开始,因此您会看到大量的连接池


查看有关连接池的详细信息

您可以采用单例方法解决此问题,并且仅当当前连接对象为空时才创建新的连接对象:

If (connectionObject != null){
   return connectionObject;
}else {
   //create new connection object
}

这将确保您在任何时候只有一个非空连接。

您可以采用单例方法解决此问题,并且仅在当前连接对象为空时创建新的连接对象:

If (connectionObject != null){
   return connectionObject;
}else {
   //create new connection object
}
这将确保您在任何时候只有一个非空连接。

您的代码看起来正常

这就是您创建新连接的方式

可能错误就在您关闭它的地方

你应该在最后一个街区把它关上

还有一些问题

1) 你确定那50个连接来自这个程序吗?也许你的办公室里还有其他人。要确认这一点,您需要停止程序,然后再次查看连接监视器

2) 您的应用程序是否同时使用多个连接?当你同时使用50时,这可能是一个峰值

如果您可以在关闭连接的位置发布代码。问题可能就在那里

此外,我建议您使用连接池。您可以自己构建一个,也可以在此页面上查看结果:

您的代码看起来很正常

这就是您创建新连接的方式

可能错误就在您关闭它的地方

你应该在最后一个街区把它关上

还有一些问题

1) 你确定那50个连接来自这个程序吗?也许你的办公室里还有其他人。要确认这一点,您需要停止程序,然后再次查看连接监视器

2) 您的应用程序是否同时使用多个连接?当你同时使用50时,这可能是一个峰值

如果您可以在关闭连接的位置发布代码。问题可能就在那里

此外,我建议您使用连接池。您可以自己构建一个,也可以在此页面上查看结果:


需要更多信息。您的环境是什么?它是一个独立的应用程序、一个框架还是一个JavaEE容器?您是否使用连接池?需要更多信息。您的环境是什么?它是一个独立的应用程序、一个框架还是一个JavaEE容器?你使用连接池吗?是的。我已经处理好了,是的。我已经处理好了。