#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:
- Создайте класс (например,
UserScore
) с двумя полями —username
иpoints
- Получите
ResultSet
для нужного запроса (черезStatement
) - Определите
List<UserScore> list = new ArrayList<UserScore>
- Зацикливайте результирующий набор, используя
while (rs.next())
и на каждой итерации создавайте новый экземплярUserScore
класса, устанавливайте оба его поля (например,userScore.setPoints(rs.getInt("numpoints")
), а затем добавляйте объект вlist
- Если вы можете использовать
List
— используйте это. Если вам действительно нужен массив — используйтеlist.toArray(..)
В качестве альтернативы вы можете использовать apache commons-dbutils, и после создания UserScore
класса вы просто вызываете:
List<UserScore> list = new BeanListHandler(UserScore.class).handle(resultSet);
Обратите внимание, что в этом случае ваши поля должны вызываться так же, как возвращаемые вами имена столбцов / псевдонимы. Вы также можете использовать ArrayListHandler
, который вместо списка определенного класса выдаст вам List<Object[]>
где каждый столбец будет элементом массива.
Комментарии:
1. хорошо, я сделал это, теперь у меня есть список пользовательских оценок типа, теперь я могу распечатать список оценок для пользователя, но как я могу манипулировать списком, чтобы я мог сказать, какие пользователи привязаны
2. выполните итерацию и посмотрите, имеют ли два соседних пользователя одинаковую оценку.
3. да, я могу видеть двух пользователей с одинаковым результатом. как я могу манипулировать этим, чтобы сказать, что пользователи с одинаковым счетом имеют ничью?
4. ну, это полностью зависит от того, как вы хотите это отобразить. Это не манипуляция, это проблема с отображением.
5. есть предложения о том, как я могу это сделать?