oracle时间为null保存报错,Mybatis+Oracle搭配insert空值报错问题

为了便于SEO搜索到,首先把报错内容贴出来吧

不同版本的Oracle驱动会报不同的错

1

2 com.oracle

3 ojdbc6

4 1.0

5

报错如下:

Error updating database.  Cause: org.apache.ibatis.type.TypeException: Could not set parameters for mapping: ParameterMapping{property='name', mode=IN, javaType=class java.lang.String, jdbcType=null, numericScale=null, resultMapId='null', jdbcTypeName='null', expression='null'}. Cause: org.apache.ibatis.type.TypeException: Error setting null for parameter #1 with JdbcType OTHER . Try setting a different JdbcType for this parameter or a different jdbcTypeForNull configuration property. Cause: java.sql.SQLException: 无效的列类型: 1111

com.oracle

ojdbc4

1.0

报错如下:

Error updating database.  Cause: org.apache.ibatis.type.TypeException: Could not set parameters for mapping: ParameterMapping{property='name', mode=IN, javaType=class java.lang.String, jdbcType=null, numericScale=null, resultMapId='null', jdbcTypeName='null', expression='null'}. Cause: org.apache.ibatis.type.TypeException: Error setting null for parameter #1 with JdbcType OTHER . Try setting a different JdbcType for this parameter or a different jdbcTypeForNull configuration property. Cause: java.sql.SQLException: 无效的列类型

有异常那就一点一点的对着MyBatis调试追踪吧。避免啰嗦,就用ojdbc6调试吧;因为ojbc6与mybatis的最新版本搭配更稳定。

便于源码分析,还是先上Demo吧。

mybatis-oracle-config.xml

1 <?xml version="1.0" encoding="UTF-8"?>

2 "http://mybatis.org/dtd/mybatis-3-config.dtd">

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

user.xml

1 <?xml version="1.0" encoding="UTF-8"?>

2 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

4

5

6 insert into users7 (name,age)8 values9 (#{name},#{age})10

11

Main方法入口:

1 public static void main(String[] args) throwsException{2 SqlSessionFactoryBuilder builder=newSqlSessionFactoryBuilder();3 SqlSessionFactory sqlSessionFactory=builder.build(Resources.getResourceAsStream("mybatis-oracle-config.xml"),"dev");4 SqlSession sqlSession=sqlSessionFactory.openSession(true);5 IUserMapper userMapper=sqlSession.getMapper(IUserMapper.class);6 User user=newUser();7 //此处不设置,故意插入null数据8 //user.setName("gggg");

9 user.setAge(20);10 int count=userMapper.insertUser(user);11 System.out.println(count == 1 ? "插入成功" : "插入失败");12 sqlSession.close();13 }

运行结果就是上面的报错内容了。

我们直接从SimpleExecutor.java执行器开始分析吧,

这个地方的stmt是指向OraclePreparedStatementWrapper.java这个类的;看来这个是Oracle驱动提供的类,继承了JDBC的Statement接口

第88行代码是开始进行sql参数进行设置的方法。我们追踪进去看看是如何实现的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值