Я использую базу данных MySQL и клиент JDBC Java для доступа к ней.
У меня есть таблица, которая содержит информацию о сеансе. Каждый сеанс связан с SessionToken. Этот токен является закодированной в Base64 строкой хэша некоторых значений сеанса. Это должно быть уникальным. И определяется как varchar (50) в БД.
Когда я пытаюсь найти сеанс по его токену, я запрашиваю базу данных, используя оператор sql:
select SessionId, ClientIP, PersonId, LastAccessTime, SessionCreateTime from InkaSession where SessionToken like 'exK/Xw0imW/qOtN39uw5bddeeMg='
У меня есть UnitTest, который проверяет эту функциональность, и он постоянно завершается сбоем, потому что запрос не возвращает ни одного сеанса, даже жесткого, я только что записал сеанс в БД.
Мой юнит-тест выполняет следующие действия:
Create Connection via DriverManager.getConnection
Add a session via Sql Insert query
close the connection
create Connection via DriverManager.getConnection
look for the session via sql select
unit test fails, because nothing found
Когда я выполняю этот UnitTest с помощью отладчика и копирую выбранный sql, который собирается отправить в базу данных, в командную строку mysql, он работает нормально, и я возвращаю строку сеанса назад.
Я также попытался получить более старую сессию из БД, запросив более старую SessionToken. Это тоже хорошо работает. Сбой только в том случае, если я запрашиваю SessionToken сразу после того, как я его вставил.
Все соединения на AutoCommit. Тем не менее, я попытался установить уровень транзакции на «Read Uncommited». Это тоже не сработало.
Есть еще какие-нибудь предложения?