1. 程式人生 > >java.sql.SQLException: Protocol violation 問題解析

java.sql.SQLException: Protocol violation 問題解析

問題描述:
Hibernate 4.0.2
Spring 3.2.3
ojdbc6
oracle使用的是 10.0.2版本


系統偶爾會出現以下錯誤:


java.sql.SQLException: Protocol violation: [1]
at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:527)


網路搜尋了一下, 基本上認為是ojdbc的版本不對導致, 回退一下ojdbc, 使用ojdbc14版本。
好像以上狀況是不會出現了, 但是在處理Blog欄位是會報如下錯誤:


java.lang.AbstractMethodError
at org.apache.commons.dbcp.DelegatingPreparedStatement.setCharacterStream(DelegatingPreparedStatement.java:328)
 
查了一下,原因還是和資料庫相關。
JDBC庫往資料庫寫入blob欄位值的吧,blob欄位寫入的時候不能直接寫在insert語句裡,insert的時候blob欄位要配個empty_blob()替代,然後在修改剛剛寫入的資料,通過二進位制流寫入blob欄位值。


看一下 Oracel JDBC驅動的歷史


1. 隨Oracle 8i釋出的Oracle JDBC驅動8.1.7版本
classes111.zip 適用於JDK 1.1.x
classes12.zip  適用於JDK 1.2.x
只有zip檔案,無jar檔案。




2. 隨Oracle 9i釋出的Oracle JDBC驅動9.2.0版本
classes111.jar  適用於JDK 1.1.x
classes12.jar   適用於JDK 1.2 and JDK 1.3 (我的專案環境JDK1.6,oracle 10g,windows,用了這個目前沒發現問題)
ojdbc14.jar     適用於JDK 1.4
classes111.zip  適用於JDK 1.1.x
classes12.zip   適用於JDK 1.2.x


3. 隨Oracle 10.2釋出的Oracle JDBC驅動10.2版
classes12.jar  適用於JDK 1.2 and JDK 1.3. 
ojdbc14.jar    適用於 JDK 1.4 and 5.0


4.隨Oracle 11.1釋出的Oracle JDBC驅動11.1版本
ojdbc5.jar:   適用於jdk5
ojdbc6.jar:   適用於jdk6 (如果你使用jdk1.5,就不能使用這個驅動)


彙總一下:
Oracle版本
jdk版本
推薦jar包
備註
Oracle 8i
JDK 1.1.x
classes111.zip
 
Oracle 8i
JDK 1.1.x
classes12.zip
 
Oracle 9i
JDK 1.1.x
classes111.jar或者 classes111.zip
 
Oracle 9i
JDK 1.2 and JDK 1.3
classes12.jar 或者 classes12.zip
 
Oracle 9i
JDK 1.4
ojdbc14.jar
 
Oracle 9i
JDK 1.5
ojdbc5.jar
 
Oracle 9i
JDK 1.6
ojdbc6.jar
 
Oracle 10g
JDK 1.2 and JDK 1.3.
classes12.jar
 
Oracle 10g
JDK 1.4 and 5.0
ojdbc14.jar
 
Oracle 11g
jdk5
ojdbc5.jar
 
Oracle 11g
jdk6
ojdbc6.jar






看起來要解決這個問題,只能是升級Oralce的版本了。




不過網路上還遇到一種狀況就是在批量處理LONG型資料的時候也遇到過這種問題, 取消批量處理就正常了。批量程式碼段如下:
PreparedStatement ps = conn.prepareStatement(sql);  
ps.setString(1, xml);  
ps.executeUpdate(); 

相關推薦

java.sql.SQLException: Protocol violation 問題解析

問題描述:Hibernate 4.0.2Spring 3.2.3ojdbc6oracle使用的是 10.0.2版本系統偶爾會出現以下錯誤:java.sql.SQLException: Protocol violation: [1]at oracle.jdbc.driver.T

解決sqoop導入報錯:Caused by: java.sql.SQLException: Protocol violation

detail ext lang dcb dsta run org with int 報錯信息: 2017-06-15 15:02:15,374 INFO [main] org.apache.hadoop.mapred.MapTask: Ignoring excepti

Error querying database. Cause: java.sql.SQLException: sql injection violation, syntax error: ERROR

異常:### Error querying database. Cause: java.sql.SQLException: sql injection violation, syntax error: ERROR. pos 85, line 2, column 48, token WHE

java.sql.SQLException: 無效的列型別: 錯誤解析

八月 16, 2018 8:47:40 下午 org.apache.catalina.core.StandardWrapperValve invoke SEVERE: Servlet.service()

Druid 之 java.sql.SQLException: sql injection violation

當我們在專案中使用了druid連線池進行資料來源的管理,並且配置瞭如下監控spring.datasource.filters: stat,wall,log4j在執行程式拼接的SQL時,xml中使用的是$

java.sql.SQLException: [Microsoft][ODBC 驅動程序管理器] 未發現數據源名稱而且未指定默認驅動程序解決方法

成功 access exception div 數據庫 java 配置 題解 調用 開發程序須要登錄功能 。就不想用大數據庫。直接用java連接access。 在自己機器上一切正常, url直連 和配置數據源都沒有問題。 公布到windows serve

Hibernate卡住,然後報錯java.sql.SQLException: Unknown system variable 'language'異常

ops environ instance bcf end int strong roo variables 啟動應用的時候會卡在: 08:22:58,221 DEBUG IntegratorServiceImpl:46 - Adding Integrator [org.hi

出現java.sql.SQLException: No suitable driver的幾種解決辦法

數據 wrap src home mysql- 放置 exc wrapper source 今天在用C3p0連接MySql數據庫 這個時候出現了上面的錯誤, 一般來說這種錯誤有3個方向解決 一般都是db的配置的問題 ,一定要小心DB 的配置 八月 19, 2017 8:30

java.sql.SQLException: Column 'class' not found.異常沒有找到列

null getbean pre ret tac ram getprop 類型 string 1 /**處理當個對象的 ,rs中要麽有一條,要麽一條沒有。 2 * @param <T> 3 */ 4 public class BeanHandl

更新MySQL數據庫( java.sql.SQLException: No value specified for parameter 1) 異常 解決方法

lex eal on() cut list data ram ast 圖片 package com.swift; import java.io.File; import java.sql.Connection; import java.sql.PreparedState

運行時報java.sql.SQLException: No suitable driver的幾種解決辦法

服務 .sql onf lex except pan java_home root ext 原因:(1)很有可能c3p0-config.xml中的配置文件出現問題,比如我是因為把“driverClass”不小心寫成了“driver”,

【MySQL】java.sql.SQLException: The server time zone value

wan rac transacti timezone prop 解決 cep enc pass 錯誤:Could not open JDBC Connection for transaction; nested exception is java.sql.SQLExcept

Caused by: java.sql.SQLException: Column 'show_type' not found

art 數據 資料 連接符 detail 遇到 spa 數據庫連接 處理 今天在處理個問題的時候遇到了這麽個bug,難住了老半天.網上找了挺多資料.這是因為hibernate在別名上的不支持.處理方案是在jdbc數據庫連接上計入了這麽個配置. 綠色的相當於是個連接符. ur

java.sql.SQLException: Field 'id' doesn't have a default value(用eclipse操作數據庫時報了這種奇怪的錯誤)的原因與解決方法

sql microsoft java except body class 操作數 解決方法 family 1、錯誤原因 由於id在數據庫表中是作為主鍵,但是在插入的過程中,沒有給予數值,並且沒有讓其自增 2、解決辦法 修改數據庫表中的id,讓

java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES)

roo 存在 body 情況 方式 post 重啟 cal java   在myeclipse上面更改項目名後,重新登錄出現java.sql.SQLException: Access denied for user ‘root‘@‘localhost‘ (using pas

JSP頁面無法使用JSP導致Mysql驅動無法找到"java.sql.SQLException: No suitable driver found for ${snapshot}"

style pub data ctype class col 無法找到 使用 found 這個問題折騰了半天,老以為是Mysql驅動的問題,還好最後偶然發現了是EL表達式識別不了報錯javax.servlet.ServletException: javax.servlet.

java.sql.SQLException: Zero date value prohibited 異常處理

原因 datetime java SQ mysql數據庫 rod 沒有 str round 最近使用MyBatis時發現了java.sql.SQLException: Zero date value prohibited 的異常,網上查了一下原因。其實是Mysql數據庫在面

java.sql.SQLException: Column count doesn't match value count at row 1

acc host quest pac cti class inter LV orm 1、異常提示:Cause: java.sql.SQLException: Column count doesn‘t match value count at row 1 ; bad SQL

Cause: java.sql.SQLException: 請求的轉換無效 ; uncategorized SQLException for SQL []; SQL state [99999]; error code [17132];異常解決

.so state DC sorl struts rfi 錯誤 var frame Cause: java.sql.SQLException: 請求的轉換無效 ; uncategorized SQLException for SQL []; SQL state [9999

java.sql.SQLException: Access denied for user 'roo'@'localhost' (using password: YES)

navicat generate 幹凈 catch conn 數據 折騰 forname mys 初學mysql,安裝了mysql8.0.11,激動的用jdbc連接數據庫,出現error,折騰了三天依舊無解,最後無奈裝了比較穩定的mysql5.5,問題得以解決,很迷,但只要