天天看點

Cause: java.sql.SQLException: 違反協定

項目 maven    webservice 接口測試 

資料庫oracle11g

測試時出現一個錯誤. Cause: java.sql.SQLException: 違反協定   這個錯誤 也是第一次碰到  ,但是 我覺得 隻要是錯誤 ,就說明 人家設計者肯定也知道,并作出了歸納。

然後我開始在報錯的日志裡從最上面一點點找,找到了selectbYid()這個方法   傳回一個對象 ,這個看起來沒錯 ,緊接着 出現了  error code 1704   ,這下面就是 關于事務如何處理的,最後處理失敗  報錯 違反協定   

找了幾遍 都沒有發現問題,後來 思考了一下 為什麼 調用mybatis查詢方法後就開始 出事了?

繼續抽絲剝繭,想到了 我傳回的對象裡面有CLOB字段,那麼這個會不會有關系?

我無從驗證 ,但是 這就引起了我的注意,如果說報錯和JDBC有關系,那麼應當留意這之前的每一個SQL ,于是 我将查詢并傳回對象的方法 修改了,而采用的是Insert()自帶的傳回帶主鍵ID的對象 (對象在Insert前 屬性除了ID都是有值的,insert後ID也有值了),這樣操作後,再去運作,此時日志出現了變化:

再列印完insert  SQL  參數後,正常運作下面的SQL操作 并列印日志   之前出現的 error code 1704 消失了

由此可見,出錯原因是:我在Insert後,查詢并傳回一個對象  對象資料庫是CLOB,屬性是String  ,這就可能引發問題了 

總結下原因,引發error code 1704錯誤的原因很複雜  ,我這裡出現的原因是  CLOB  取出來 轉String的時候 出現問題  導緻無法封裝到對象 ,我采取繞開這個查詢,