【发布时间】:2009-11-27 11:17:19
【问题描述】:
我正在使用 MySQL DB 和 Java JDBC 客户端来访问它。
我有一个包含会话信息的表。每个会话都与一个 SessionToken 相关联。此令牌是一些会话值的哈希的 Base64 编码字符串。它应该是独一无二的。并在数据库中定义为 varchar(50)。
当我尝试通过其令牌查找会话时,我使用如下 sql 语句查询数据库:
select SessionId, ClientIP, PersonId, LastAccessTime, SessionCreateTime from InkaSession where SessionToken like 'exK/Xw0imW/qOtN39uw5bddeeMg='
我有一个测试这个功能的单元测试,它总是失败,因为查询没有返回任何会话,即使很难,我刚刚将会话写入数据库。
我的单元测试执行以下操作:
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 并将即将发送到 db 的 select sql 复制到 mysql 命令行中时,它工作正常,并且我得到了会话行。
我还尝试通过请求较旧的 SessionToken 从数据库中检索较旧的会话。这也很好。如果我在插入 SessionToken 后立即要求它,它只会失败。
所有连接都在 AutoCommit 上。尽管如此,我还是尝试将事务级别设置为“未提交读取”。这也不起作用。
还有什么建议吗?
【问题讨论】: