`

ibatis 配置调用存储过程,jdbctype配置

 
阅读更多

 

数据库存储过程如下:

procedure p_project_details_stat
(
i_date_start in varchar2,
i_date_end in varchar2,
i_range_start in number,
i_range_end in number,
i_org_id in number,
i_species_id IN VARCHAR2,
i_query_user_id in number,
o_report_id out number
)
配置调用如下:

<parameterMap id="proMap" class="map">
<parameter property="complainDateStart" javaType="java.lang.String" mode="IN" jdbcType="VARCHAR" />
<parameter property="complainDateEnd" javaType="java.lang.String" mode="IN" jdbcType="VARCHAR" />
<parameter property="priceOne" javaType="java.math.BigDecimal" mode="IN" jdbcType="NUMBER" />
<parameter property="priceTwo" javaType="java.math.BigDecimal" mode="IN" jdbcType="NUMBER" />
<parameter property="orgId" javaType="java.math.BigDecimal" mode="IN" jdbcType="NUMBER" />
<parameter property="speciesIdList" javaType="java.lang.String" mode="IN" jdbcType="VARCHAR" />
<parameter property="userId" javaType="java.math.BigDecimal" mode="IN" jdbcType="NUMBER" />
<parameter property="reportId" javaType="java.math.BigDecimal" mode="OUT" jdbcType="NUMBER" />
</parameterMap>
<procedure id="generateProjectDetial" parameterMap="proMap">
<![CDATA[
CALL szzc_stat.p_project_details_stat(?,?,?,?,?,?,?,?)
]]>
</procedure>

 

老是报:
--- Check the CALL szzc_stat.p_project_details_stat(?,?,?,?,?,?,?,?).
--- Check the output parameters (register output parameters failed).
--- Cause: java.sql.SQLException: 无效的列类型: -99999999

 

网上查找资料:

 

后来查看java.sql.Types类中有关JDBC类型变量类型,并没有发“NUMBER”这一静态字段,而只有“NUMERIC”字段。(因此 jdbcType 的值不是数据库ORACLE的参数类型,而是其对应的JDBC变量类型)

但改了之后依然报同样错误。

后来发现在java.sql.Types类中还有一个DECIMAL静态常量,与javaType定义的java.math.BigDecimal类型一致。

再修改测试则通过,不再报错。

所以“无效的列类型”异常解决方法,根据存储过程的参数类型找出正确的jdbcType(具体参考java.sql.Types类的JDBC静态变量)。

 

 

地址:http://www.cnblogs.com/leolwang/archive/2010/03/25/1694539.html

 

 

正确配置:

<parameterMap id="proMap" class="map">
<parameter property="complainDateStart" javaType="java.lang.String" mode="IN" jdbcType="VARCHAR" />
<parameter property="complainDateEnd" javaType="java.lang.String" mode="IN" jdbcType="VARCHAR" />
<parameter property="priceOne" javaType="java.math.BigDecimal" mode="IN" jdbcType="DECIMAL" />
<parameter property="priceTwo" javaType="java.math.BigDecimal" mode="IN" jdbcType="DECIMAL" />
<parameter property="orgId" javaType="java.math.BigDecimal" mode="IN" jdbcType="DECIMAL" />
<parameter property="speciesIdList" javaType="java.lang.String" mode="IN" jdbcType="VARCHAR" />
<parameter property="userId" javaType="java.math.BigDecimal" mode="IN" jdbcType="DECIMAL" />
<parameter property="reportId" javaType="java.math.BigDecimal" mode="OUT" jdbcType="DECIMAL" />
</parameterMap>
<procedure id="generateProjectDetial" parameterMap="proMap">
<![CDATA[
CALL szzc_stat.p_project_details_stat(?,?,?,?,?,?,?,?)
]]>
</procedure>

jdbcType类型:

 

 

数据库类型与JDBC TYPE 和Java类型对应关系

SQL Datatypes

JDBC Typecodes

Standard Java Types

Java取值范围

NUMBER

java.sql.Types.NUMERIC

java.math.BigDecimal

无限制

NUMBER

java.sql.Types.DECIMAL

java.math.BigDecimal

无限制

NUMBER

java.sql.Types.BIT

boolean

true,false

NUMBER

java.sql.Types.TINYINT

byte

from –128 to 127

NUMBER

java.sql.Types.SMALLINT

short

from –32768 to 32767

NUMBER

java.sql.Types.INTEGER

int

From –2147483648 to 2147483647

NUMBER

java.sql.Types.BIGINT

long

From –9223372036854775808 to 9223372036854775807

NUMBER

java.sql.Types.REAL

float

From 1.4E-45

To 3.4028235E38

NUMBER

java.sql.Types.FLOAT

double

From 4.9E-324 to

1.7976931348623157E308

NUMBER

java.sql.Types.DOUBLE

double

分享到:
评论

相关推荐

    ibatis调用oracle存储过程

    最后,在Java代码中,通过ibatis的Session对象调用存储过程,传入必要的参数,处理返回的结果集。 ```java SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(Resources....

    ibatis调用存储过程

    在Java开发中,iBATIS(现在被称为MyBatis)是一个流行的数据持久层框架,它允许开发者将SQL语句直接嵌入到Java代码中,从而简化数据库操作。...希望这个示例能帮助你更好地理解iBATIS调用存储过程的方法。

    ibatis调用存储过程介绍

    本文将详细介绍如何使用iBATIS调用存储过程,并提供一个简单的示例来说明其过程。 首先,我们需要在数据库中创建一个存储过程。以下是一个Oracle数据库中的存储过程示例: ```sql CREATE OR REPLACE PROCEDURE pp ...

    Ibatis调用存储过程调用存储过程

    ### Ibatis调用存储过程详解 #### 一、引言 在实际的软件开发过程中,存储过程因其执行效率高及数据库级别的安全性等优点被广泛应用于各种业务场景之中。而对于使用Ibatis作为持久层框架的应用来说,如何有效地...

    Ibatis调用Oracle存储过程返回自定义类型

    #### 使用Ibatis调用存储过程 Ibatis是一个Java持久层框架,它能够简化Java应用程序与数据库之间的交互。为了调用上述存储过程并正确处理返回值,我们需要进行以下配置: ##### 日志配置(log4j.properties) ```...

    ibatis调存储过程返回游标

    本文将深入探讨如何使用iBatis调用存储过程并返回游标,这是一个在处理复杂数据库操作时常见的需求。 ### iBatis调用存储过程返回游标 #### 存储过程简介 存储过程是预先编译并存储在数据库中的SQL代码块,它可以...

    ibatis调用oracle的函数,存储过程的方法

    调用存储过程: ```java Map, Object&gt; params = new HashMap(); params.put("id", id); sqlSession.execute("updateEmployeeStatus", params); String status = (String) params.get("status"); ``` 5. **...

    ibatis与存储过程(带输出参数的应用)

    在实际项目中,使用Ibatis调用存储过程时,还应注意以下几点: 1. 不同的数据库系统可能有不同的存储过程调用语法,如Oracle、MySQL、SQL Server等,需要根据具体数据库进行调整。 2. 存储过程中的输出参数在Java...

    ibatis调用oracle的函数,存储过程的方法 IN 和OUT /游标

    本篇文章将详细探讨如何在iBatis中调用Oracle的函数和存储过程,尤其是处理IN和OUT参数以及游标的场景。 首先,我们需要了解iBatis的基本工作原理。iBatis是一个SQL映射框架,它允许开发者将SQL语句写在XML配置文件...

    ibatis增删查改,存储过程调用

    本篇文章将深入探讨如何在Ibatis中实现增、删、查、改(CRUD)操作,并调用存储过程,同时涉及相关的表结构设计。 首先,Ibatis通过XML配置文件或注解方式定义了SQL语句,允许我们编写动态SQL,以适应不同的查询...

    struts2 存储过程

    总结,Struts2调用存储过程涉及数据库连接、DAO设计、Action控制和视图展示等多个环节。通过合理配置和编程,我们可以有效地利用存储过程提升应用的效率和灵活性。"Struts2_crud2.0_Procedure"示例提供了具体实现,...

    ibatis的CRUD+存储过程+动态查询

    本教程将深入探讨Ibatis如何实现CRUD(创建、读取、更新、删除)操作,如何调用存储过程,以及如何进行动态查询。 **创建(Create)** 在Ibatis中,创建数据通常通过SQL映射文件实现。每个映射文件包含一个或多个...

    ibatis 增删改查 存储过程及分页模拟

    本教程将详细介绍如何利用Ibatis进行增删改查操作,调用存储过程以及实现分页功能,并通过Log4j配置来输出SQL日志。 首先,让我们了解Ibatis的基本配置。Ibatis的核心配置文件是`mybatis-config.xml`,在这里你可以...

    Mybatis调用PostgreSQL存储过程实现数组入参传递

    在Mybatis的Mapper XML文件中,通过设置`&lt;select&gt;`元素的`statementType`属性为`CALLABLE`来调用存储过程。例如: ```xml {call func_arr_update(#{ids, mode=IN, jdbcType=ARRAY})} ``` 这里的`#{ids}`是Java...

    ibatis入门教程

    通过这个 iBatis 入门教程,你应该已经掌握了如何配置 iBatis、编写映射文件、创建接口、调用存储过程以及使用动态 SQL 等基本操作。在实际开发中,iBatis 还有许多高级特性和最佳实践,例如结果映射、缓存机制、...

    ibatis和mybatis的前世今生.txt

    - **存储过程调用**:可以通过ibatis方便地调用数据库中的存储过程,并处理返回的结果集。 ```xml &lt;parameter property="p0" jdbcType="INTEGER" javaType="string" mode="OUT"/&gt; &lt;parameter property="p1" ...

    访问存储过程(或函数)一般以procedure标签来定义statement。

    )}`则是具体调用存储过程或函数的SQL语句。 #### 二、ParameterMap标签定义输入输出参数 对于存储过程或函数来说,它们往往需要与应用程序交互数据。为了实现这一点,IBATIS提供了`parameterMap`标签来定义输入...

    mybatis中操作json类型数据(csdn)————程序.pdf

    `@MappedJdbcTypes(JdbcType.VARCHAR)`注解表示此TypeHandler适用于JDBC的VARCHAR类型,因为通常JSON数据以字符串形式存储在数据库中。 类中有一个静态的`ObjectMapper`实例,这是Jackson库的主要组件,用于读取和...

    MyBatis-3-User-Guide

    MyBatis是一个优秀的持久层框架,它支持自定义SQL、存储过程以及高级映射。MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集的过程,可以将接口和Java的POJOs(Plain Old Java Objects,普通的Java对象)...

Global site tag (gtag.js) - Google Analytics