gpt4 book ai didi

java - 查询结束后与数据库的连接未关闭

转载 作者:行者123 更新时间:2023-12-01 08:48:10 24 4
gpt4 key购买 nike

我执行了这个查询,但没有关闭连接,我不明白为什么。这是显示连接数的屏幕截图(这就是为什么我知道连接未关闭) enter image description here

请帮我解决问题。

这是代码:

@Override
public Map<MenuItem, Long> getGtinFromIngredientByLinkedProduct(Map<Long, MenuItem> ingredientIdProductMap) {
Map<MenuItem, Long> result = new HashMap<MenuItem, Long>();
String sql = "SELECT INGREDIENTS_GLOBAL_TRACK_IDF, INGREDIENT_ID FROM [PWRNXGDTA].INGREDIENTS WHERE INGREDIENT_ID in (";
StringBuilder ingredientsIDs = new StringBuilder();
boolean first = true;
Set<Long> ingredients = ingredientIdProductMap.keySet();
System.out.println("Ingredient id's SIZE: " + ingredients.size());
for(Long ingredientId : ingredients) {
if(!first){
ingredientsIDs.append(",");
} else {
first = false;
}
ingredientsIDs.append(ingredientId);
}
sql+= ingredientsIDs+")";
Connection con = null;
PreparedStatement ps = null;
QueryRunner q = null;
ResultSet rs = null;
try {
q = super.getQueryRunner();
con = q.getDataSource().getConnection();
ps = con.prepareStatement(sql);
rs = ps.executeQuery();
while (rs.next()) {
result.put(ingredientIdProductMap.get(rs.getLong("INGREDIENT_ID")),
rs.getLong("INGREDIENTS_GLOBAL_TRACK_IDF"));
}
} catch (DAOException | SQLException e) {
logger.info(e.getMessage());
}
finally {
try {
if(ps != null){
ps.close();
}
if(con != null) {
con.close();
}
if(q != null) {
q.getDataSource().getConnection().close();
}
if(rs != null) {
rs.close();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

return result;
}

有什么想法吗?

谢谢

最佳答案

在你的finally block 中,你没有创建一个新的连接吗?

if(q != null) {
q.getDataSource().getConnection().close();
}

QueryRunner 有一些 prepareConnection 方法和不同的close,您可以使用它们来简化处理。

关于java - 查询结束后与数据库的连接未关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42552041/

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