Осмотреть в памяти hsqldb во время отладки
Мы используем hdsqldb в памяти для запуска тестов junit, которые работают с базой данных. Перед запуском каждого теста с помощью конфигурации spring db настроен. Все работает нормально.
Теперь, когда тесты терпят неудачу, может быть удобно проверять значения в базе данных памяти. Это возможно? Если да, то как?
Наш URL:
jdbc.url = JDBC: HSQLDB: MEM: TESTDB; sql.enforce_strict_size = истина
База данных уничтожается после каждого теста. Но когда работает отладчик, база данных также должна оставаться в живых. Я попытался подключиться к sqlb databaseManager. Это работает, но я не вижу никаких таблиц или данных. Любая помощь очень ценится!
Ответы
Ответ 1
HSQL находится в памяти, поэтому, когда вы говорите, что подключаетесь с помощью диспетчера баз данных SQLDB, вы этого не делаете - вместо этого вы подключаетесь к другой базе данных в области памяти диспетчера баз данных SQLDB, а не к той, которая находится в области памяти unit тест. Вот почему база данных в диспетчере баз данных SQLDB пуста.
Вы можете запустить HSQL как сервер, используя org.hsqldb.Server
как описано здесь.
Хотя класс org.hsqldb.Server
обычно используется для запуска отдельного процесса, вы можете создать его экземпляр и настроить его в модульном тесте, который должен позволить удаленному процессу подключаться и запрашивать базу данных.
В качестве альтернативы вам придется написать какую-то функциональность дампа, которая вызывается изнутри вашего модульного теста по мере необходимости.
Кроме того, использование HSQL в модульных тестах просто доказывает, что ваш код работает против HSQL, который отличается от реальной базы данных. Это означает, что вы можете получить ложные срабатывания и наоборот. То же самое может быть достигнуто с помощью API-интерфейса или лучше, за исключением тестирования базы данных для некоторых достойных интеграционных тестов, которые работают с реальной базой данных.
Ответ 2
В вашем unit test или в методе @Before
/setUp()
вы можете добавить следующую строку для запуска менеджера баз данных HSQL:
org.hsqldb.util.DatabaseManager.main(new String[] {
"--url", "jdbc:hsqldb:mem:testdb", "--noexit"
});
или для улучшенной версии Swing
org.hsqldb.util.DatabaseManagerSwing.main(new String[] {
"--url", "jdbc:hsqldb:mem:testdb", "--noexit"
});
Менеджер БД позволяет вам проверять вашу схему и запускать SQL-запросы в базе данных в реальном времени во время работы приложения.
Убедитесь, что вы указали точку доступа или приостановили выполнение так или иначе, если хотите проверить состояние своей базы данных на определенной строке.
Ответ 3
Запустите ваш unit тест до точки останова, затем в перспективе Debug Eclipse откройте представление Display (Окно, Показать представление, Показать) и введите
org.hsqldb.util.DatabaseManagerSwing.main(new String[] {
"--url", "jdbc:hsqldb:mem:testdb", "--noexit"
});
(согласно сообщению dimdm), выделите его, щелкните правой кнопкой мыши и выберите "Выполнить".
![enter image description here]()
Ответ 4
Вы также можете использовать класс DatabaseManagerSwing, включенный в [HSQLDB] [1], передавая ему открытое соединение, которое позволяет вам видеть состояние базы данных в транзакции, в которой находится соединение.
DatabaseManagerSwing manager = new DatabaseManagerSwing();
manager.main();
manager.connect(connection);
manager.start();
Ответ 5
Вышеупомянутый принятый ответ прекрасно работает, только если имя базы данных, имя пользователя и пароль не затронуты (testdb, SA, пустой пароль).
Для пользовательского имени базы данных, имени пользователя и пароля вы получите следующее исключение
java.sql.SQLInvalidAuthroizationSpecException: неверная спецификация авторизации - не найдено: SA
Затем вы должны подключиться вручную.
Для прямого подключения используйте следующий фрагмент
org.hsqldb.util.DatabaseManager.main(new String[] {
"--url", "jdbc:hsqldb:mem:yourdbname", "--noexit",
"--user", "dbusername", "--password", "dbpassword"
});
или для улучшенной версии Swing
org.hsqldb.util.DatabaseManagerSwing.main(new String[] {
"--url", "jdbc:hsqldb:mem:yourdbname", "--noexit",
"--user", "dbusername", "--password", "dbpassword"
});
Перед выполнением приведенного выше фрагмента обновите следующее
- yourdbname - обновите yourdbname реальным именем базы данных
- dbusername - обновить dbusername, указав имя пользователя вашей базы данных.
- dbpassword - обновите dbpassword своим паролем базы данных
Ответ 6
Проблема с зависанием менеджера баз данных может быть решена путем запуска менеджера баз данных в новом потоке и спящего потока, в котором выполняется тест.
Добавьте этот фрагмент кода в свой тест, и вы сможете проверить базу данных во время отладки. Не забудьте изменить url-адрес базы данных для вашей базы данных.
Thread t = new Thread(new Runnable() {
@Override
public void run() {
org.hsqldb.util.DatabaseManagerSwing.main(new String[] {
"--url", "jdbc:hsqldb:mem://localhost:9001", "--noexit"
});
}
});
t.start();
try {
Thread.sleep(10000000);
} catch (InterruptedException e) {
e.printStackTrace();
}