http://blog.sina.com.cn/s/blog_a45aac720100yu3h.html
ERROR-util.JDBCExceptionReporter>: 違反協議
ERROR-util.JDBCExceptionReporter>: OALL8 處於不一致狀態!
ERROR-util.JDBCExceptionReporter>: OALL8 處於不一致狀態!
最近被這個問題糾結了很久,昨天終於找到了正確的解決方案,總結下, 出現這種問題的原因大致有
種:
1、連接oracle驅動不匹配。比如說在11g+jdk6.0的環境下,使用ojdbc5.jar。
2、中途修改了表結構等信息,也會導致上述錯誤。(重啟WEB就不會再出現了)
3、操作字段數據時,不按照字段類型規范去操作。這也是一種比較隱藏的一個問題。比如說,我有一個表table,該表就2個字段,一個number類型tid,一個varchar2類型tname。從數據庫建表規范上來說,表應該要有主鍵的,所以就設定第一個字段為主鍵,按序列遞增。那么,怎么樣使異常重現呢?請看如下sql:
select * from table where tid = '1';
從結果上來說,這個sql是沒有問題的,不信大家可以在PL/SQL上試一試。但是,很明顯,tid明明是number類型,但是后面卻是比較了一個字符串類型的值。
而我出現這樣的問題也是因為這個,在我JAVA中寫的hql語句(hibernate)里面,有好幾處都是這樣(由於使用的是模板,所以當時拷貝的時候沒注意這些),導致頻繁出現這類問題。(也有可能跟hibernate有關,具體我就沒有多做深究了。)
2、中途修改了表結構等信息,也會導致上述錯誤。(重啟WEB就不會再出現了)
3、操作字段數據時,不按照字段類型規范去操作。這也是一種比較隱藏的一個問題。比如說,我有一個表table,該表就2個字段,一個number類型tid,一個varchar2類型tname。從數據庫建表規范上來說,表應該要有主鍵的,所以就設定第一個字段為主鍵,按序列遞增。那么,怎么樣使異常重現呢?請看如下sql:
select * from table where tid = '1';
從結果上來說,這個sql是沒有問題的,不信大家可以在PL/SQL上試一試。但是,很明顯,tid明明是number類型,但是后面卻是比較了一個字符串類型的值。
而我出現這樣的問題也是因為這個,在我JAVA中寫的hql語句(hibernate)里面,有好幾處都是這樣(由於使用的是模板,所以當時拷貝的時候沒注意這些),導致頻繁出現這類問題。(也有可能跟hibernate有關,具體我就沒有多做深究了。)
