【发布时间】:2010-10-03 21:55:26
【问题描述】:
我在我的 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 对象。这里可能缺少什么?
出于效率和安全原因,我计划将所有语句替换为 PreparedStatements。这会有很大帮助吗?还能做什么?
编辑: 这只是一个核心 java 应用程序,它通过 MySQL-JDBC 连接器重复查询 MySQL 数据库中某些字段的更改。我没有使用 Spring 或 Hibernate 等任何框架。
【问题讨论】:
-
需要更多信息。你的环境是什么,它是一个独立的应用程序、一个框架还是一个 JavaEE 容器?你使用连接池吗?
标签: java jdbc connection