#java #servlets
#java #сервлеты
Вопрос:
Я должен написать сервлет, который получает идентификатор пользователя и его имя, а также имя и фамилию пользователя. Информация о пользователе, которую мы должны проверить, находится в базе данных с именем userinfo
, а информация о людях, которых мы ищем, хранится в базе данных с именем people
.
Как мне обрабатывать два отдельных запроса к БД? Нужно ли мне создать два отдельных класса (по одному для каждого подключения к БД), а затем написать мой сервлет в соответствии с (очевидно, неправильный синтаксис — просто смотрю на концепции):
if (connection to UserinfoDB)
{
//code for the handling of correct or for mismatching id and password
}
if (connection to PeopleDB)
{
//code for handling the proper input of last name and first name off of the second connection
}
HTML-код, записанный сервлетом
Это то, что нужно сделать, или я могу сделать все это в одном классе, как я бы сделал с обычным запросом к одной базе данных (мне было показано, что это делается следующим образом):
подключитесь к базе данных
doPost
{
//1. get info from servlet form
//2. query the DB
//3. insert something into the db or whatever you are doing
}
//print some HTML feedback from the servlet
//close the db connect
Спасибо за любую помощь!
Ответ №1:
Чтение данных простое. Если вам нужно прочитать обе базы данных в одном HTTP-запросе, то:
get connection to db1
prepare statement
execute it and get results, save them to local variables
close resultset, statement, connection to db1
get connection to db2
prepare statement
execute it and get results, save them to local variables
close resultset, statement, connection to db2
Если вам нужно прочитать либо из них, что ж, решайте на основе параметров и выполняйте только один из приведенных выше блоков.
Закрывать соединения и другие вещи лучше в блоке finally, чтобы избежать утечек в случае исключений.
Большая проблема заключается в том, что вам нужно последовательно обновлять две базы данных, т. Е. если обновление до db2 завершается неудачей, обновление до db1 не было бы зафиксировано. Для этого вы должны получить поддержку распределенных / глобальных транзакций. Наиболее распространенным способом является миграция из контейнера сервлета в контейнер EJB и запуск кода в сеансовом компоненте с требуемой транзакцией.