Многие объяснения уже присутствуют, чтобы объяснить, как это происходит и как это исправить, но вы также должны следовать рекомендациям, чтобы избежать NullPointerException
вообще.
См. также: A хороший список лучших практик
Я бы добавил, очень важно, хорошо использовать модификатор final
. Использование "окончательной" модификатор, когда это применимо в Java
Сводка:
final
для обеспечения хорошей инициализации. @NotNull
и @Nullable
if("knownObject".equals(unknownObject)
valueOf()
поверх toString (). StringUtils
StringUtils.isEmpty(null)
. При использовании SQL 2005, можно сделать что-то вроде этого...
SELECT rs.Field1,rs.Field2
FROM (
SELECT Field1,Field2, Rank()
over (Partition BY Section
ORDER BY RankCriteria DESC ) AS Rank
FROM table
) rs WHERE Rank <= 10
, Если Ваш RankCriteria имеет связи тогда, можно возвратить больше чем 10 строк, и решение Matt может быть лучше для Вас.
оператор UNION мог бы работать на Вас? Имейте один ВЫБОР для каждого раздела, затем ОБЪЕДИНЕНИЕ их вместе. Угадайте, что это только работало бы на постоянное число разделов все же.
Если Вы знаете, каковы разделы, можно сделать:
select top 10 * from table where section=1
union
select top 10 * from table where section=2
union
select top 10 * from table where section=3
Я делаю это этот путь:
SELECT a.* FROM articles AS a
LEFT JOIN articles AS a2
ON a.section = a2.section AND a.article_date <= a2.article_date
GROUP BY a.article_id
HAVING COUNT(*) <= 10;
<час> обновление: Этот пример GROUP BY работает в MySQL и SQLite только, потому что те базы данных являются более разрешающими, чем стандартный SQL относительно GROUP BY. Большинство реализаций SQL требует, чтобы все столбцы в списке выборки, которые не являются частью составного выражения, были также в GROUP BY.
Это работает над SQL Server 2005 (отредактированный для отражения разъяснения):
select *
from Things t
where t.ThingID in (
select top 10 ThingID
from Things tt
where tt.Section = t.Section and tt.ThingDate = @Date
order by tt.DateEntered desc
)
and t.ThingDate = @Date
order by Section, DateEntered desc