我现在的项目是用的jdk1.4+eclipse3.2+myeclipse5.0+tomcat5.0+oracle9i struts+hibernate2 做的,我试着把数据库驱动换成了oracle8i 还是这个错误,感觉是配置问题,因为在项目的别的模块的一样的操作都能用,怀疑是不是hibernate2与hibernate3不兼容?但是别的地方怎么能用了?
在保存信息的时候 出现下面的 错误ava.sql.SQLException: 违反协议
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134)
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:179)
at oracle.jdbc.dbaccess.DBError.check_error(DBError.java:1160)
at oracle.jdbc.ttc7.Ocommoncall.receive(Ocommoncall.java:149)
at oracle.jdbc.ttc7.TTC7Protocol.rollback(TTC7Protocol.java:487)
at oracle.jdbc.driver.OracleConnection.rollback(OracleConnection.java:1376)
at com.mchange.v2.c3p0.impl.C3P0PooledConnection.reset(C3P0PooledConnection.java:251)
at com.mchange.v2.c3p0.impl.C3P0PooledConnection.access$000(C3P0PooledConnection.java:35)
at com.mchange.v2.c3p0.impl.C3P0PooledConnection$ProxyConnectionInvocationHandler.doSilentClose(C3P0PooledConnection.java:531)
at com.mchange.v2.c3p0.impl.C3P0PooledConnection$ProxyConnectionInvocationHandler.invoke(C3P0PooledConnection.java:636)
at com.mchange.v2.c3p0.impl.$Proxy0.close(Unknown Source)
at net.sf.hibernate.connection.C3P0ConnectionProvider.closeConnection(C3P0ConnectionProvider.java:48)
at net.sf.hibernate.impl.BatcherImpl.closeConnection(BatcherImpl.java:275)
at net.sf.hibernate.impl.SessionImpl.disconnect(SessionImpl.java:3285)
at net.sf.hibernate.impl.SessionImpl.close(SessionImpl.java:497)
at gmit.gsf.tool.hibernate.PersistentTool.search(PersistentTool.java:586)
at gmit.gsf.arch.BaseBO._search(BaseBO.java:81)
at gmit.gsf.arch.BaseSI._search(BaseSI.java:39)
at gmit.jzt.orguser.action.OrgRoleManageSI_updateAction.searchOrgAgent(OrgRoleManageSI_updateAction.java:138)
at gmit.jzt.orguser.action.OrgRoleManageSI_updateAction.execute(OrgRoleManageSI_updateAction.java:86)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:509)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:277)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1490)
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:530)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:214)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:198)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:152)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:118)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:929)
at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705)
at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
at java.lang.Thread.run(Thread.java:534)
[net.sf.hibernate.util.JDBCExceptionReporter.ERROR] 违反协议 2007-09-04 12:50:21,250 
 [net.sf.hibernate.util.JDBCExceptionReporter.ERROR] 违反协议 2007-09-04 12:50:21,250 
 [net.sf.hibernate.util.JDBCExceptionReporter.ERROR] Cannot close connection 2007-09-04 12:50:21,250 

解决方案 »

  1.   

    http://www.oracle.com/technology/tech/java/sqlj_jdbc/htdocs/jdbc_faq.htm#30_17
    What does "Protocol Violation" mean? 
    The Thin driver throws this exception when it reads something from the RDBMS that it did not expect. This means that the protocol engine in the Thin driver and the protocol engine in the RDBMS are out of synch. There is no way to recover from this error. The connection is dead. You should try to close it, but that will probably fail too. If you get a reproducible test case that generates this error, please file a TAR with Oracle Global Support. Be sure to specify the exact version numbers of the JDBC driver and the RDBMS, including any patches.问题是出在JdbcDriver与Oracle数据库不匹配上。   
    建议换一个和你用的Oracle版本匹配的JDBC驱动程序!如果还解决不了问题,那需要测试是那些记录不能通过,我记得好象BLOB也有些问题。