getLong not implemented for class oracle.jdbc.driver.T4CRowidAccessor
症状:
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。
getLong not implemented for class oracle.jdbc.driver.T4CRowidAccessor的更多相关文章
- 无效的列类型:getTimestamp not implemented for class oracle.jdbc.driver.T4CNumberAccessor
错误信息: 无效的列类型:getTimestamp not implemented for class oracle.jdbc.driver.T4CNumberAccessor 错误原因:经过排查发现 ...
- java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver 错误的解决办法
java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver 错误的解决办法 (2011-05-05 16:08:05) 转载▼ ...
- myeclipe eclipse 常遇问题:Some projects cannot be imported 、java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver、The file connot be validate
1.Some projects cannot be imported because they already exist in the workspace 2.Some projects were ...
- 关于Class.forName("oracle.jdbc.driver.OracleDriver");报ClassNotFoundException 的异常
关于try { Class.forName("oracle.jdbc.driver.OracleDriver"); }catch(ClassNotFoundException e) ...
- Class org.apache.struts2.json.JSONWriter can not access a member of class oracle.jdbc.driver.Physica
产生这个错误的原因是因为我的oracle数据库中有一个CLOB字段,查询出来的时候要转换为JSON而报错. Class org.apache.struts2.json.JSONWriter can n ...
- 【转】Install Oracle Jdbc driver in your Maven local repository
Install Oracle Jdbc driver in your Maven local repository If you are using Oracle, you must first in ...
- locked (a oracle.jdbc.driver.T4CConnection
发现写Oracle的线程挂住了,场景是从mysql读数据,然后写到Oracle. 1 定位线程 因为在同一台机器上运行了多个java进程,要找到对应的pid,就是连接mysql的的那个进程. ...
- 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 ...
- spring配置hibernate在使用oracle驱动时报错Cannot load JDBC driver class 'oracle.jdbc.driver.OracleDriver '
在看到这个错误的时候就感觉有点不对劲了,在错误的结尾和引号之间还有空间,如果敏锐的点应该察觉到可能是空格问题.由于本人的粗心导致这个问题一直困扰了我接近一个上午. 在排查这个问题的时候首先想到的就是关 ...
随机推荐
- JMeter下载及安装配置完整版
特别需要注意的时,jdk版本和jmeter版本匹配问题. Jdk1.8对应apache-jmeter-3.3 Jmeter下载及安装配置 本文是在win7环境下安装使用jmeter,jmeter可以运 ...
- Exception in thread "main" org.springframework.beans.factory.BeanCreationException
Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error ...
- Ubuntu 安装QT5 后编译程序报错: FindQt5Widgets.cmake
安装QT5.4后,需要编译一个C++程序. Cmakelist 有find_package(Qt5Widgets REQUIRED),cmake 报错如下: CMake Error at CMakeL ...
- [Training Video - 4] [Groovy] Initializing log inside class with constructor
TestService s = new TestService(log,context,testRunner) s.xyz() class TestService{ def log def conte ...
- 电脑破解wifi密码(至少连过1次的才可以)
电脑破解wifi密码(至少连过1次的才可以) 连过的wifi密码忘记了怎么办? 只要你电脑连过的都能破解. cmd输入以下内容查看电脑连接过的wifi名字. netsh wlan show profi ...
- fwrite与fread
函数原型 size_t fread(void *buffer, size_t size, size_t count, FILE *stream); size_t fwrite(const void ...
- delphi实现窗体组建随窗体大小改变而改变
在网上查了许多资料去论述如何在dephi中去实现组件随窗口大小的变化而变化,然都不尽如人意.有人说用组件的align + anchors 这两个属性去控制,但是我用了之后,让我大惊失色.把anchor ...
- redis 映射数据结构粗略
[字符串] sds结构,simple dynamic string.是redis底层字符串实现,结构为: typedef char *sds; struct sdshdr { // buf 已占用长度 ...
- jsonp的使用记录
最近前端的同事说要写一个手机查看的html5页面,需要我提供数据. 这个很ok啊,立马写了个服务返回数据.但是对方调用不了,因为跨域了. 返回错误如下: Failed to load xxxxxx: ...
- orcal exists
Oracle使用了一个复杂的自平衡B-tree结构.通常,通过索引查询数据比全表扫描要快.当 Oracle找出执行查询和Update语句的最好路径时,Oracle优化器将使用索引.同样在联结多个表时使 ...