Это нормально для передачи ResultSet?

В моей ситуации я запрашиваю базу данных для конкретного возврата (в этом случае регистрационная информация основана на имени пользователя).

            //Build SQL String and Query Database.
        if(formValid){
            try {
                SQL = "SELECT * FROM users WHERE username=? AND email=?";
                Collections.addAll(fields, username, email);
                results = services.DataService.getData(SQL, fields);
                if (!results.next()){
                    errMessages.add("User account not found.");
                } else {
                    user = new User();
                    user.fillUser(results); //Is it ok to pass ResultSet Around?
                }
            } catch (SQLException e) {
                e.printStackTrace();
            } finally {
                services.DataService.closeDataObjects(); //Does this close the ResultSet I passed to fillUser?
            }
        }

Поэтому, когда я запрашиваю базу данных, если результат найден, я создаю новый объект User и заполняю его данными, полученными из базы данных. Раньше я делал все это непосредственно в методе, в который перетаскивал набор результатов, но я понял, что во всем проекте выполняю много избыточного кодирования, поэтому я переместил все это в один центральный метод, который живет в реальном компоненте User.

    public void fillUser(ResultSet data) throws SQLException{
    setUserId(data.getInt("id"));
    setFirstName(data.getString("first_name"));
    setLastName(data.getString("last_name"));
    setUsername(data.getString("username"));
    setType(data.getString("type"));
    setEmail(data.getString("email"));
}

Я сделал несколько тестов, и из того, что я могу определить, поскольку я закрываю исходный набор результатов в блоке finally запроса, набор результатов, который я передаю в метод fillUser, также закрывается. Или я не прав, и я серьезно утечки данных? На самом деле это второй раз, когда я передаю набор результатов (так что его два экземпляра один), потому что блок, который я использую для запроса моей базы данных

    public static ResultSet getData(String SQL, ArrayList fields) throws SQLException {
    try{
        connection = Database.getConnection();
        preparedStatement = connection.prepareStatement(SQL);

        for(int i=0; i<fields.size(); i++){
            Integer num = i + 1;
            Object item = fields.get(i);

            if(item instanceof String){
                preparedStatement.setString(num, (String) item); //Array item is String.
            } else if (item instanceof Integer){
                preparedStatement.setInt(num, (Integer) item); //Array item is Integer.
            }
        }

        resultSet = preparedStatement.executeQuery();
        return resultSet;
    }finally{

    }
}

Все эти фрагменты кода живут в отдельных классах и многократно используются в моем проекте. Это нормально, чтобы передать набор результатов, как это, или я должен попробовать другой метод? Моя цель состоит в том, чтобы уменьшить избыточность кодов, но я не уверен, что сделаю это легально.

Ответы на вопрос(2)

Ваш ответ на вопрос