【发布时间】:2016-11-23 21:26:20
【问题描述】:
在我的 Web 应用程序中,我有单独的类 DataAccess.java 和 DBUtils.java。
我在 DBUtils.jva 中有以下代码
public static PreparedStatement getPreparedStatement(String sql) throws ClassNotFoundException, SQLException{
PreparedStatement ps = null;
Class.forName("com.mysql.jdbc.Driver");
String url = "jdbc:mysql://localhost:3306/company";
String user = "root";
String pass = "root";
Connection con = DriverManager.getConnection(url, user, pass);
ps = con.prepareStatement(sql);
return ps;
我在 DataAccess.java 类中有以下代码
public static List<Company> getAllCompanies(){
List<Company> ls = new LinkedList<>();
try {
String sql = "select * from company";
ResultSet rs = DBUtils.getPreparedStatement(sql).executeQuery();
while (rs.next()){
Company cp = new Company (rs.getInt(1), rs.getString(2), rs.getInt(3),rs.getTimestamp(9));
ls.add(cp);
}
rs.close();
} catch (ClassNotFoundException | SQLException ex) {
Logger.getLogger(DataAccess.class.getName()).log(Level.SEVERE, null, ex);
}
return ls;
}
我正在从不同的 servlet 调用 getAllCompanies 函数。我不知道如何正确关闭数据库连接,因为它是在一个类中打开并从另一个类中调用的。由于与数据库的打开连接过多,我的 Web 应用程序不断崩溃,错误说,
com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException:数据源拒绝建立连接,来自服务器的消息:“连接太多”
有人可以告诉我在这种情况下如何正确关闭数据库连接。
【问题讨论】: