ibatis 执行sqlserver存储过程
JDBC执行存储过程方法二:
可以通过,如果将<parameter property="userId" javaType="Integer" jdbcType="INTEGER" mode="OUT" />
改为<parameter property="userId" javaType="Integer" jdbcType="int" mode="OUT" />则报错:
现在<parameter property="userId" javaType="Integer" jdbcType="int" mode="INOUT" />
将jdbcType="int" mode="INOUT" 可以通过,但是前提是传进来的对象NormalUser的userId属性不能为空。
联想到上面jdbc java代码中设置call.registerOutParameter(1,-99999);之后有加入代码call.setObject(1, 1);
引用ibatis parameterMap的子元素parameter的属性jdbcType用于显式地指定给本属性(property)赋值的数据库字段的数据类型。
对于某些特定的操作,如果不指定字段的数据类型,某些JDBC Driver无法识别字段的数据类型。一个很好的例子是
PreparedStatement.setNull(int parameterIndex, int sqlType)方法,要求指定数据类型。如果不指定数据类型,
某些Driver可能指定为Types.Other或Types.Null。但是,不能保证所有的Driver都表现一致。对于这种情况,
SQL Map API允许使用parameterMap子元素parameter的jdbcType属性指定数据类型。
正常情况下,只有当字段可以为NULL时才需要jdbcType属性。另一需要指定jdbcType属性的情况是字段类型为日期时间类型的情况。
因为Java只有一个Date类型(java.util.Date),而大多数SQL数据库有多个-通常至少有3种。因此,
需要指定字段类型是DATE还是DATETIME。属性jdbcType可以是JDBC Types类中定义的任意参数的字符串值。
虽然如此,还是有某些类型不支持(即BLOB)。本节的稍后部分会说明架构支持的数据类型。
注意!大多数JDBC Driver只有在字段可以为NULL时需要指定jdbcType属性。因此,对于这些Driver,
只是在字段可以为NULL时才需要指定type属性。注意!当使用Oracle Driver时,如果没有给可以为NULL的字段指定jdbcType属性,
当试图给这些字段赋值NULL时,会出现“Invalid column type”错误。
附上Ibatis parameterMap的子元素parameter的属性jdbcType的解释
本人小菜,文笔欠佳,请见谅!