Java 资源泄漏:';rset&x27;此位置未关闭

Java 资源泄漏:';rset&x27;此位置未关闭,java,memory-leaks,resource-leak,Java,Memory Leaks,Resource Leak,所以我正在做一个项目,我不确定如何处理这个错误,或者可以做些什么来修复它。我已经尝试了我能想到的一切,也许其他人对如何修复它有一些意见。它是用java编写的,用于游戏。错误是资源泄漏:“rset”未在此位置关闭。这是它挑出来的这一行 rset = statement.executeQuery("SELECT * FROM `items` WHERE `owner_id` = " + objectId + " AND `location` = " + ItemLocation.EQUIPMENT.

所以我正在做一个项目,我不确定如何处理这个错误,或者可以做些什么来修复它。我已经尝试了我能想到的一切,也许其他人对如何修复它有一些意见。它是用java编写的,用于游戏。错误是资源泄漏:“rset”未在此位置关闭。这是它挑出来的这一行

rset = statement.executeQuery("SELECT * FROM `items` WHERE `owner_id` = " + objectId + " AND `location` = " + ItemLocation.EQUIPMENT.ordinal());
希望有人对如何修复此错误有一些意见,如果我取消警告,它会导致内存泄漏或影响程序的性能吗

public final PlayerPreview restorePreview(int objectId) {
    Connection con = null;
    PreparedStatement statement = null;
    ResultSet rset = null;

    try {
        con = connectFactory.getConnection();

        statement = con.prepareStatement(SELECT_PLAYER_PREVIEW);
        statement.setInt(1, objectId);

        rset = statement.executeQuery();

        if(!rset.next()) {
            LOGGER.warning("not found player for " + objectId);
            return null;
        }

        PlayerPreview playerPreview = PlayerPreview.newInstance(objectId);

        playerPreview.setSex(rset.getByte("sex"));
        playerPreview.setRaceId(rset.getByte("race_id"));
        playerPreview.setClassId(rset.getByte("class_id"));
        playerPreview.setLevel(rset.getByte("level"));
        playerPreview.setOnlineTime(rset.getLong("online_time"));
        playerPreview.setName(rset.getString("char_name"));

        PlayerAppearance appearance = loadPlayerAppearance(objectId);

        if(appearance == null)
            return null;

        Equipment equipment = PlayerEquipment.newInstance(null);

        ItemTable itemTable = ItemTable.getInstance();

        {
            rset = statement.executeQuery("SELECT * FROM `items` WHERE `owner_id` = " + objectId + " AND `location` = " + ItemLocation.EQUIPMENT.ordinal());

            while(rset.next()) {
                ItemTemplate template = itemTable.getItem(rset.getInt("item_id"));

                if(template == null)
                    continue;

                ItemInstance item = template.newInstance(rset.getInt("object_id"));

                item.setIndex(rset.getInt("index"));
                item.setLocation(ItemLocation.VALUES[rset.getInt("location")]);
                item.setOwnerId(objectId);
                item.setItemCount(rset.getLong("item_count"));
                item.setEnchantLevel(rset.getShort("enchant_level"));
                item.setBonusId(rset.getInt("bonus_id"));
                item.setAutor(rset.getString("autor"));

                equipment.setItem(item, item.getIndex());
            }
        }

        playerPreview.setAppearance(appearance).setEquipment(equipment);

        return playerPreview;
    } catch(SQLException e) {
        LOGGER.warning(e);
    } finally {
        DBUtils.closeDatabaseCSR(con, statement, rset);
    }

    return null;
}

检查完“未找到播放机”后,应关闭
rset


之后您正在执行一个新查询,但没有关闭以前的resultset->resource leak。

非常感谢您,这让我抓狂!