Другое событие NullPointerException
возникает, когда объявляется массив объектов, а затем сразу же пытается разыменовать его внутри.
String[] phrases = new String[10];
String keyPhrase = "Bird";
for(String phrase : phrases) {
System.out.println(phrase.equals(keyPhrase));
}
Этот конкретный NPE можно избежать, если порядок сравнения отменяется ; а именно, использовать .equals
для гарантированного непустого объекта.
Все элементы внутри массива инициализируются их общим начальным значением ; для любого типа массива объектов, это означает, что все элементы null
.
Вы должны инициализировать элементы в массиве перед доступом или разыменованием их.
String[] phrases = new String[] {"The bird", "A bird", "My bird", "Bird"};
String keyPhrase = "Bird";
for(String phrase : phrases) {
System.out.println(phrase.equals(keyPhrase));
}
Мы можем использовать приведенный ниже скрипт для отключения индексов
ALTER INDEX ALL ON [TableName]
DISABLE;
Сделайте массовую вставку в таблицу и затем запустите следующий скрипт.
ALTER INDEX ALL ON [TableName]
REBUILD;
Вам нужно будет запустить скрипт, который выбирает метаданные для таблицы и индекса. Затем вы можете выполнить:
ALTER INDEX indexname ON tablename DISABLE;
Позже вы можете запустить аналогичный скрипт для перестройки:
ALTER INDEX indexname ON tablename REBUILD;
Вы можете сделать это по одному или собрать их в NVARCHAR ( MAX) и выполняйте их как один пакет. Вы можете увидеть пример кода в этом предыдущем вопросе:
Используйте этот скрипт для отключения всех индексов
-- Disable All Indices
DECLARE @Script NVARCHAR(MAX)
DECLARE curIndices CURSOR FAST_FORWARD READ_ONLY FOR
SELECT 'ALTER INDEX ' + QUOTENAME(indices.name) + ' ON ' + QUOTENAME(SCHEMA_NAME(tableNames.schema_id))+'.'+ QUOTENAME(tableNames.name) + ' DISABLE'
FROM
sys.indexes indices INNER JOIN
sys.tables tableNames ON indices.object_id = tableNames.object_id
WHERE
indices.type_desc = 'NONCLUSTERED' AND
indices.name IS NOT NULL AND
indices.is_disabled = 0;
OPEN curIndices
FETCH NEXT FROM curIndices INTO @Script
WHILE @@FETCH_STATUS = 0
BEGIN
PRINT @Script
EXECUTE sp_executesql @Script
FETCH NEXT FROM curIndices INTO @Script
END
CLOSE curIndices
DEALLOCATE curIndices
Используйте этот скрипт для перестройки (включения) всех индексов
-- Rebuild All Indices
DECLARE @Script NVARCHAR(MAX)
DECLARE curIndices CURSOR FAST_FORWARD READ_ONLY FOR
SELECT 'ALTER INDEX ' + QUOTENAME(indices.name) + ' ON ' + QUOTENAME(SCHEMA_NAME(tableNames.schema_id))+'.'+ QUOTENAME(tableNames.name) + ' REBUILD'
FROM
sys.indexes indices INNER JOIN
sys.tables tableNames ON indices.object_id = tableNames.object_id
WHERE
indices.type_desc = 'NONCLUSTERED' AND
indices.name IS NOT NULL AND
indices.is_disabled = 1;
OPEN curIndices
FETCH NEXT FROM curIndices INTO @Script
WHILE @@FETCH_STATUS = 0
BEGIN
PRINT @Script
EXECUTE sp_executesql @Script
FETCH NEXT FROM curIndices INTO @Script
END
CLOSE curIndices
DEALLOCATE curIndices