Другое событие 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));
}
См.
, там система управления версиями для изменений структуры базы данных?
, Как я присваиваю версию своей базе данных SQL MS в SVN?
и статья
Jeff Получают Вашу Базу данных При Управлении версиями
, я чувствую Вашу боль, и мне жаль, что не было лучшего ответа. Это могло бы быть ближе к тому, что Вы искали.
Механизмы для отслеживания изменений схемы DB
Обычно, который я чувствую, нет никакого соответствующего, принятого решения этого, и я прокручиваю свое собственное в этой области.
Я интересуюсь этой темой также.
существуют некоторые обсуждения этой темы в Django wiki.
Интересно, это похоже , CakePHP имеет управление версиями схемы, встроенное использование всего cake schema generate
команда.
Я использую база данных Firebird для большей части разработки, и я использую административное средство FlameRobin для нее. Это имеет хорошую опцию зарегистрировать все изменения. Это может зарегистрировать все в один большой файл, или один файл для каждой базы данных изменяется. Я использую эту вторую опцию, и затем я храню каждый сценарий в программном обеспечении управления версиями - ранее я использовал Подверсию, теперь я использую Мерзавца.
я предполагаю, что можно найти некоторый инструмент MySQL, который имеет ту же функцию входа как FlameRobin, делает для Firebird.
В одной из таблиц базы данных, я храню номер версии структуры базы данных, таким образом, я могу обновить любую базу данных легко. Я также записал простой Сценарий PHP, который выполняет те сценарии SQL один за другим на любой целевой базе данных (путь к базе данных, и имя пользователя/пароль предоставляются на командной строке).
существует также опция зарегистрироваться, весь DML (вставьте, обновление удаляют), операторы, и я активирую это при изменении некоторых данных 'по умолчанию', которые содержит каждая база данных.
я записал хороший отчет о том, как я делаю все это подробно. Можно скачать статью в формате pdf наряду с демонстрационными Сценариями PHP от здесь .
Я также разработал ряд Сценариев PHP, где разработчики могут отправить свои deltasql сценарии центральному репозиторию.
В одной из таблиц базы данных (названный TBSYNCHRONIZE), я храню номер версии последнего выполняемого сценария, таким образом, я могу обновить любую базу данных легко при помощи веб-интерфейса или клиента, разработанного нарочно для Eclipse.
веб-интерфейс позволяет управлять несколькими проектами. Это поддерживает также базу данных "ответвления".
можно протестировать приложение в http://www.gpu-grid.net/deltasql (если Вы входите в систему как администратор с паролем testdbsync). Приложение является открытым исходным кодом и может быть загружено здесь: http://sourceforge.net/projects/deltasql
deltasql используется продуктивно в Швейцарии и Индии, и популярен в Японии.
Я не для сигналения моего собственного рога, но я разработал внутреннее веб-приложение, чтобы отследить изменения в схемах базы данных и создать имеющие версию сценарии обновления.
Этот инструмент называют Бразилия и является теперь открытым исходным кодом в соответствии с лицензией MIT. Бразилия рубиновая / рубин на базирующихся направляющих и поддерживает развертывание изменения на любой базе данных что поддержки Ruby DBI (MySQL, ODBC, Oracle, Пост-ГРЭС, SQLite).
Поддержка помещения сценариев обновления в управлении версиями планируется.
Вы не упоминали, который RDBMS Вы используете, но если это - SQL Server MS, Красный Логический элемент , SQL Выдерживает сравнение , было необходимо для нас в создании дельт между сценариями создания объекта.
Я не управляю дельтами. Я вношу изменения в основную базу данных и имею инструмент, который создает XML базирующийся сценарий сборки на основе основной базы данных.
, Когда это прибывает время для обновления существующей базы данных, у меня есть программа, которая использует XML базирующийся сценарий сборки для создания новой базы данных и пустых таблиц. Я затем копирую данные из старой базы данных с помощью INSERT INTO x ВЫБОР ИЗ y и затем применяю все индексы, ограничения и триггеры.
таблицы New, новые столбцы, удалили столбцы, все обрабатываются автоматически и с несколькими небольшими приемами для корректировки стандартной программы копии, я могу обработать столбец, переименовывает, изменения типа столбца и другие основные рефакторинги.
я не рекомендовал бы это решение на базе данных с огромным объемом данных, но я регулярно обновляю базу данных, которая составляет более чем 1 ГБ с 400 таблицами.
Вы могли бы смотреть на другого, подобный поток: , Как я присваиваю версию своей базе данных SQL MS в SVN? .
Мы экспортируем данные в мобильный формат (использующий наш набор инструментальных средств), затем импортируя его к новой схеме. никакая потребность в дельте SQL. Наиболее рекомендуемый.
http://bitbucket.org/idler/mmp - инструмент управления версиями схемы для mysql, написанный на PHP
Несколько месяцев назад я искал инструмент для версионирования схемы MySQL. Я нашел много полезных инструментов, таких как Doctrine migration, RoR migration, некоторые инструменты, написанные на Java и Python.
Но ни один из них не удовлетворял моим требованиям.
Мои требования:
Я начал писать свой инструмент миграции, и сегодня у меня есть бета-версия.
Пожалуйста, попробуйте ее, если вам интересна эта тема. Пожалуйста, присылайте мне будущие запросы и сообщения об ошибках.
Исходный код: bitbucket.org/idler/mmp/src Обзор на английском языке: bitbucket.org/idler/mmp/wiki/Home Обзор на русском: antonoff.info/development/mysql-migration-with-php-project