我正在使用MySQL DB和Java JDBC客戶端來訪問它。Mysql在寫入後立即讀取數據?
我有一個包含會話信息的表。每個會話都與一個SessionToken相關聯。該令牌是某些會話值的散列的Base64編碼的字符串。它應該是獨一無二的。並且在db中定義爲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
當我通過這個單元測試步驟與調試器和複製過去的選擇SQL是將要發送到數據庫到MySQL命令行,它的工作原理很好,我得到了會議排。
我也嘗試通過請求一個較舊的SessionToken來從數據庫中檢索較舊的會話。這工作也很好。它只會失敗,如果我插入它後立即要求SessionToken。
所有連接都在AutoCommit上。儘管如此,我試圖將交易級別設置爲「未讀取」。這也沒有用。
有沒有人有任何進一步的建議?
是的,那基本上是我所做的。除此之外,由於SQL語法錯誤,commit()將失敗。我覺得很奇怪。我關閉()連接。無論如何,在Autocommit模式下,這不應該是必要的,應該嗎?此外,數據保留在分貝,所以我不認爲有任何未完成的交易。有什麼方法可以肯定嗎? – Mario 2009-11-27 12:00:49
還試圖禁用AutoCommit並顯式提交。這樣做(即commit()不再引發異常),但不能解決問題。 – Mario 2009-11-27 12:06:25
連接器已經有vrsion 5.1.10。 – Mario 2009-11-27 12:43:07