症状:

SpringMVC+MyBatis向数据库插入数据,主键应用ORACLE中自己设置的自增序列会发生如下错误:

nested exception is Java.sql.SQLException: 无效的列类型: getLong not implemented for class oracle.jdbc.driver.T4CRowidAccessor

解决办法:

相应实体类映射文件中

<insert id="save" parameterType="io.renren.entity.ScheduleJobEntity" useGeneratedKeys="false" keyProperty="jobId"  databaseId="oracle">insert into "schedule_job"("bean_name", "method_name", "params", "cron_expression", "remark")values(#{beanName,jdbcType=NVARCHAR}, #{methodName,jdbcType=VARCHAR}, #{params,jdbcType=VARCHAR}, #{cronExpression,jdbcType=VARCHAR}, #{remark,jdbcType=VARCHAR})</insert>

将 useGeneratedKeys="true" 改为 useGeneratedKeys="false" 。

把insert 属性里的useGeneratedKeys的属性设置为false就可以成功插入数据了,useGeneratedKeys 要求数据库本身具备主键自动增长的功能,  mysql,sqlserver可以使用useGeneratedKeys =true 这功能,oracle不支持useGeneratedKeys,所以ORACLE是不能使用useGeneratedKeys =true的。

7月20日补充:

按照上面方法,虽然数据插入成功了,但是在 ScheduleJobEntity 中无法返回 jobId值,即ScheduleJobEntity.jobId为NULL,这将导致后续代码出错。

Oracle虽然不直接支持自增ID,但可以通过序列实现类似自增ID的效果,因此,改为以下代码:

<insert id="save" parameterType="io.renren.entity.ScheduleJobEntity" keyProperty="jobId"  databaseId="oracle"><selectKey resultType="Long" order="BEFORE" keyProperty="jobId">  SELECT SEQ_SCHEDULE_JOB.NEXTVAL as jobId from DUAL</selectKey> insert into "schedule_job"("job_id","bean_name", "method_name", "params", "cron_expression", "status","remark")values(#{jobId,jdbcType=INTEGER}, #{beanName,jdbcType=NVARCHAR}, #{methodName,jdbcType=VARCHAR}, #{params,jdbcType=VARCHAR}, #{cronExpression,jdbcType=VARCHAR}, #{status,jdbcType=VARCHAR}, #{remark,jdbcType=VARCHAR})</insert>

经测试,运行正常,运行后返回插入记录的ID给Entity。

 

转载于:https://www.cnblogs.com/legendjslc/p/7159171.html

getLong not implemented for class oracle.jdbc.driver.T4CRowidAccessor相关推荐

  1. java.sql.SQLException: 无效的列类型: getLong not implemented for class oracle.jdbc.driver.T4CRowidAccessor

    Springboot+MYbaits框架下,使用以下注解操作oracle插入数据时报错 @Insert("insert into student (stuid,name)values(#{s ...

  2. JSP Tomcat8.0运行连接池时发生异常【AbstractMethodError oracle.jdbc.driver.T4CConnection.isValid(I)Z】...

    原创 2015年12月28日 11:38:01 2004 一.Tomcat8.0运行连接池时发生异常: AbstractMethodError oracle.jdbc.driver.T4CConnec ...

  3. oracle.jdbc.driver.OracleDriver和oracle.jdbc.OracleDriver这两个驱动有什么区别?

    连接Oracle数据库必须先向java程序注册Oracle JDBC驱动程序,然后才能打开数据库连接.有两种注册Oracle JDBC驱动程序的办法. 1.使用java.lang.Class的forN ...

  4. jdbc driver oracle,Driver class 'oracle.jdbc.driver.OracleDriver' could not be found

    kettle中配置db连接到oracle数据库报错, 错误连接数据库 [192.168.2.19_test] : org.pentaho.di.core.exception.KettleDatabas ...

  5. fail to load driver class oracle.jdbc.driver.OracleDriver in eitherofHIkariConfig class loader

    项目场景: 该项目为springboot连接mysql,读取数据库中的数据源配置,在代码组装成多数据源进行操作 问题描述 idea本地启动项目访问OK,但部署到远程服务器,连接oracle时报,fai ...

  6. Jasper连接Oracle报:oracle.jdbc.driver.OracleDriver cannot be found by net.sf.jasperreports_6.6.0.final

    在TIBCO Jaspersoft Studio-6.6.0中创建oracle连接的时候选择oracle,提示, net.sf.jasperreports.engine.JRRuntimeExcept ...

  7. 【spring boot基础知识】java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver

    出现此错误需要增加odbc jar包. 出现此错误的原因据说是这样的: 在使用Maven的依赖甲骨文的​​驱动包时,会出现依赖错误的情况,原因是版权原因,甲骨文官方屏蔽了依赖,那么要在本地使用的Mav ...

  8. t4c oracle,locked (a oracle.jdbc.driver.T4CConnection

    发现写Oracle的线程挂住了,场景是从mysql读数据,然后写到Oracle. 1 定位线程 因为在同一台机器上运行了多个java进程,要找到对应的pid,就是连接mysql的的那个进程. [adm ...

  9. java.sql.SQLException: oracle.jdbc.driver.OracleDriver

    该异常说明 Oracle驱动出现异常. 检查 项目中 ojdbc.jar包 是否完整. 如果maven依赖引入jar包失败,可以手动下载jar包.加载. 如果项目中jar包完整. 将jar包放入 To ...

最新文章

  1. 设计模式学习1:设计模式简述和设计模式原则
  2. python中常见的流程结构-【Python2】04、Python程序控制结构
  3. Java技术:Spring Boot 配置文件敏感信息加密
  4. Java EE 企业网站_基于jsp的企业网站系统-JavaEE实现企业网站系统 - java项目源码...
  5. java运输_JAVA-基础-方法
  6. linux命令-p,Linux-send命令详解
  7. 海康网络摄像头添加到萤石云
  8. 制作简易的幸运转盘抽奖
  9. Multithreaded Rendering Graphics Jobs 多线程渲染与图形Jobs 性能系列8
  10. 2021中国开源优秀人物榜出炉!
  11. mui-添加自定义图标(彩色)
  12. [note]First draft of a report on the EDVAC (1~2)
  13. winedit使用教程_【STemWin教程入门篇】第43章 EDIT-编辑控件
  14. intellij idea weblogic 下面 怎么远程断点
  15. 利用XSS漏洞实现键盘记录器
  16. 股票自动化交易软件的优势
  17. C语言malloc申请空间函数的两种返回方法
  18. tar命令打包排除某个文件或目录
  19. Kubernetes CKS 2021 Course【15】---Microservice Vulnerabilities - mTLS
  20. 倪光南:IT业需要蓝海红海两大战略

热门文章

  1. vbscript html 在线,在HTML中使用VBScript可用三种方法
  2. python计算2的20次方_Python学习二运算符
  3. Linux版本跟Hadoop版本,Hadoop本地库与系统版本不一致引起的错误解决方法
  4. 内容 超链接_excel中如何设置目录与返回目录超链接?这两种方法很简单
  5. linux怎么开启iis管理员权限,为每个站点的IIS设置权限
  6. 属性getter和setter
  7. CSS 总结我对3D效果的一些误解
  8. linux环境搭建pypi源,使用pypi-server搭建简单的PyPI源
  9. php数组书写形式,php数组(array)输出的三种形式讲解
  10. java的file类中的方法_java中File类的使用方法|chu