心随自在飞 2015-07-03 08:08 采纳率: 0%
浏览 3543

ibatis Oracle函数配置(字符串格式不匹配)

用iBATIS配置数据库函数调用的问题,出现的是ORA-01861: literal does not match format string(字符串格式不匹配)
求大虾 解救 急

下面是关键代码

这是数据库函数的参数列表
(pi_Money IN NUMBER, --交易金额
pi_BankNo IN VARCHAR2, -- 银行代码
pi_FundId IN VARCHAR2, -- 目标基金
pi_Apkind IN VARCHAR2, --购买方式

pi_CustNo IN VARCHAR2, -- 交易账号
pi_Apdt IN DATE, -- 申请日期

po_fee OUT NUMBER, -- 手续费
po_ErrCode OUT VARCHAR2, -- 返回代码
po_ErrMsg OUT VARCHAR2 -- 返回信息

ibatis的配置

<![CDATA[
{#{flag,mode=OUT,jdbcType=INTEGER}=call f_GetInternetFee(#{pi_Money,mode=IN,jdbcType=DOUBLE},
#{pi_BankNo,mode=IN,jdbcType=VARCHAR},
#{pi_FundId,mode=IN,jdbcType=VARCHAR},
#{pi_Apkind,mode=IN,jdbcType=VARCHAR},
#{pi_CustNo,mode=IN,jdbcType=VARCHAR},
to_date('2014/11/11','yyyy-MM-dd'),

            #{po_fee,mode=OUT,jdbcType=DOUBLE},
            #{po_ErrCode,mode=OUT,jdbcType=VARCHAR},
            #{po_ErrMsg,mode=OUT,jdbcType=VARCHAR})} 
    ]]> 
</select>

这是测试代码
Map<String,Object> map=new HashMap<String, Object>();
        map.put("pi_Money", 50000.0);
        map.put("pi_BankNo", "095");
        map.put("pi_FundId", "050002");

        map.put("pi_Apkind", "022");
        map.put("pi_CustNo", "001553218");
        map.put("pi_Apdt", new Date());
        internetFeeCenterDao.getInternetFee(map);
        System.out.println(map.get("po_fee"));

        报错的结果:
        2015-07-03 15:58:05 [java.sql.PreparedStatement]-[DEBUG] ==>  Executing: {?=call f_GetInternetFee (?, ?, ?, ?, ?, ?, ?, ?, ? )}  -(:28)

2015-07-03 15:58:05 [java.sql.PreparedStatement]-[DEBUG] ==> Parameters: 50000.0(Double), 095(String), 050002(String), 022(String), 001553218(String), 2015-01-11(String) -(:28)
org.apache.ibatis.exceptions.PersistenceException:

Error querying database. Cause: java.sql.SQLException: ORA-01861: literal does not match format string

ORA-06512: at line 1

The error may involve com.bosera.trade.dao.center.IInternetFeeCenterDao.getInternetFee-Inline

The error occurred while setting parameters

Cause: java.sql.SQLException: ORA-01861: literal does not match format string

ORA-06512: at line 1

at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:8)
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:80)
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:72)
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectOne(DefaultSqlSession.java:38)
at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:75)
at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:38)
at $Proxy10.getInternetFee(Unknown Source)
at com.bosera.trade.junittest.JunitMybatisTest.test(JunitMybatisTest.java:62)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:73)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:46)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:180)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:41)
at org.junit.runners.ParentRunner$1.evaluate(ParentRunner.java:173)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31)
at org.junit.runners.ParentRunner.run(ParentRunner.java:220)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:46)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)

Caused by: java.sql.SQLException: ORA-01861: literal does not match format string
ORA-06512: at line 1

  • 写回答

2条回答

  • 丵鹰 2015-07-03 08:26
    关注

    参数如期为字符串,与字段类型不符,你不作to_date处理应该是没有问题的

    评论

报告相同问题?

悬赏问题

  • ¥50 永磁型步进电机PID算法
  • ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
  • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
  • ¥15 如何处理复杂数据表格的除法运算
  • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
  • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
  • ¥200 uniapp长期运行卡死问题解决
  • ¥15 latex怎么处理论文引理引用参考文献
  • ¥15 请教:如何用postman调用本地虚拟机区块链接上的合约?
  • ¥15 为什么使用javacv转封装rtsp为rtmp时出现如下问题:[h264 @ 000000004faf7500]no frame?