Обработка записей mysql на java

#java #mysql #jdbc

#java #mysql #jdbc

Вопрос:

У меня есть таблица с оценками, которые участники получают после завершения викторины. Затем я выбираю max(points) для каждого пользователя и группирую по пользователю

 select distinct userName, max(points) as numpoints
from tblscore
group by userName 
order by numpoints desc
  

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

Комментарии:

1. вы используете jdbc, и вы знаете о наборах результатов и операторах, верно?

2. да, я использую jdbc и да, я использую результирующий набор

3. и как вы хотите, чтобы выглядел ваш массив? Массив чего?

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

5. Пожалуйста, решайте проблемы по очереди и показывайте некоторый рабочий код для каждого вопроса. Мы здесь для того, чтобы помочь вам в написании кода, а не писать всю программу за вас 🙂

Ответ №1:

  1. Создайте класс (например, UserScore ) с двумя полями — username и points
  2. Получите ResultSet для нужного запроса (через Statement )
  3. Определите List<UserScore> list = new ArrayList<UserScore>
  4. Зацикливайте результирующий набор, используя while (rs.next()) и на каждой итерации создавайте новый экземпляр UserScore класса, устанавливайте оба его поля (например, userScore.setPoints(rs.getInt("numpoints") ), а затем добавляйте объект в list
  5. Если вы можете использовать List — используйте это. Если вам действительно нужен массив — используйте list.toArray(..)

В качестве альтернативы вы можете использовать apache commons-dbutils, и после создания UserScore класса вы просто вызываете:

 List<UserScore> list = new BeanListHandler(UserScore.class).handle(resultSet);
  

Обратите внимание, что в этом случае ваши поля должны вызываться так же, как возвращаемые вами имена столбцов / псевдонимы. Вы также можете использовать ArrayListHandler , который вместо списка определенного класса выдаст вам List<Object[]> где каждый столбец будет элементом массива.

Комментарии:

1. хорошо, я сделал это, теперь у меня есть список пользовательских оценок типа, теперь я могу распечатать список оценок для пользователя, но как я могу манипулировать списком, чтобы я мог сказать, какие пользователи привязаны

2. выполните итерацию и посмотрите, имеют ли два соседних пользователя одинаковую оценку.

3. да, я могу видеть двух пользователей с одинаковым результатом. как я могу манипулировать этим, чтобы сказать, что пользователи с одинаковым счетом имеют ничью?

4. ну, это полностью зависит от того, как вы хотите это отобразить. Это не манипуляция, это проблема с отображением.

5. есть предложения о том, как я могу это сделать?