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的时候 出现问题  导致无法封装到对象 ,我采取绕开这个查询,

你可能感兴趣的:(oracle)