gpt4 book ai didi

java - 此处是否需要关闭数据库连接?

转载 作者:搜寻专家 更新时间:2023-10-30 20:25:47 24 4
gpt4 key购买 nike

我正在用 java 和 mssql 做一个学校项目,我在数据库连接方面遇到了一些问题。

这种情况需要关闭数据库连接吗?

我想构建一个由 Person 对象组成的 Animal 对象。

这是来自 DBLayer/DBAnimal 的代码:

首先我们有连接到数据库并获取结果集的方法。

public Animal findAnimal(int id) 
{
con = DBConnection.getInstance().getDBcon();
PreparedStatement preStmnt = null;
String query = "select * from animal where id = ?";
Animal animalObj = null;
ResultSet results;
try
{
preStmnt = con.prepareStatement(query);
preStmnt.setInt(1, id);
results = preStmnt.executeQuery();
if (results.next())
{
animalObj = buildAnimal(results);
}
} catch (SQLException SQLe) {
System.out.println("SQL Exception i findAnimal: " + SQLe);
} catch (Exception e) {
System.out.println("Exception i findAnimal() " + e.getMessage());

}

DBConnection.closeConnection();
return animalObj;
}

然后我在哪里构建 Animal 对象并调用 FindPersonOnId 方法:

public Animal buildAnimal(ResultSet results) throws SQLException 
{

Animal animalObj = new Animal();

Person personObj = new Person();

try
{

animalObj.setId(results.getInt("id"));
animalObj.setName(results.getString("name"));
animalObj.setRace(results.getInt("raceid"));
animalObj.setSpecie(findSpecieId(results.getInt("raceid")));
animalObj.setSex(results.getString("sex").charAt(0));
animalObj.setBorn(results.getDate("born"));
animalObj.setAlive(results.getBoolean("alive"));
animalObj.setPerson(dbPerson.findPersonOnId(results.getInt("personId")));
}

catch (SQLException e)
{
System.out.println("Exception i buildAnimal" + e.getMessage());
}

return animalObj;
}

这是来自 DBLayer/DBPerson:

public Person findPersonOnId(int id) 
{
con = DBConnection.getInstance().getDBcon();
PreparedStatement preStmnt = null;
String query = "SELECT * FROM " + TABLE_NAME + " WHERE id = ?";
Person personObj = null;
ResultSet results;
try
{
preStmnt = con.prepareStatement(query);
preStmnt.setInt(1, id);
results = preStmnt.executeQuery();
if (results.next())
{
personObj = buildPerson(results);
}
}
catch(SQLException SQLe)
{
System.out.println("SQLException i findPersonOnId(id): " + SQLe);
}
catch (Exception e)
{
System.out.println("Fejl i findPersonOnId(id): " + e.getMessage());
}

DBConnection.getInstance().closeConnection();
return personObj;
}

如您所见,我两次都使用了 closeConnection,这导致了一些问题,因为它非常慢。而且我正在徘徊,在这种情况下有必要完全关闭连接。

如果不是,会是什么情况?

最佳答案

是的

每次建立连接时,您都必须确保它最终被关闭,否则您将泄漏资源并留下太多打开的连接,您的应用程序将崩溃。

话虽如此,有一些工具和库可以使这件事变得更容易,Spring JdbcTemplate就是其中之一。

如果不查看您的 DBConnection 类,它似乎正在尝试执行 Datasource 的操作。确实如此,请考虑改用适当的 datasource

关于java - 此处是否需要关闭数据库连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34700771/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com