无法从mybatis执行的oracle过程中接收参数
我使用Spring 3.0.5开发java应用程序,并使用mybatis-spring使用数据库Oracle。
我有一个mybatis界面:
public interface SubscriberMapper { Subscriber getSubscriberByMsisdn(String msisdn); void insertSubscriber(Subscriber subscriber); void updateSubscriber(Subscriber subscriber); void canCustomerSubscribe(@Param("msisdn") String msisdn, @Param("responseCode") Integer responseCode);
}
canCustomerSubscribe的mybatis xml内容:
CALL wallet.pkg_wallet_validation.can_customer_subscribe(#{msisdn}, #{responseCode})
和要执行的代码:
public void subscribe(String msisdn) throws InvalidArgumentException { Integer responseCode = 0; subscriberMapper.canCustomerSubscribe(msisdn, responseCode); System.out.println("msisdn: " + msisdn + ", responseCode: " + responseCode); }
当我用无效的“msisdn”执行“subscribe”方法时,我没有收到来自程序的实际值。 在数据库中执行此过程会返回reponseValue = 1001,但在Java代码中我收到0.我打开调试日志记录为stout for mybatis,输出为:
2011-10-19 10:32:46,732 DEBUG [main](Slf4jImpl.java:28)ooo连接已打开 2011-10-19 10:32:46,909 DEBUG [main](Slf4jImpl.java:28)==>执行:CALL wallet.pkg_wallet_validation.can_customer_subscribe(?,?) 2011-10-19 10:32:46,911 DEBUG [main](Slf4jImpl.java:28)==>参数:509999999(String),0(整数) msisdn:509999999,responseCode:0
当我更改“subscribe”方法responseCode = null时,我收到并错误:
org.springframework.jdbc.UncategorizedSQLException:设置null参数时出错。 大多数JDBC驱动程序都要求必须为所有可为空的参数指定JdbcType。 原因:java.sql.SQLException:列类型无效 ; 未分类的SQL []的SQLException; SQL状态[null]; 错误代码[17004]; 列类型无效; 嵌套exception是java.sql.SQLException:列类型无效
我找到了解决方案 在canCustomerSubscribe方法中,Map必须是user而不是两个参数。
void canCustomerSubscribe(Map params);
mybatis xml内容:
(我需要在参数属性之间添加逗号)
从订阅服务方法调用它:
public void subscribe(String msisdn) throws InvalidArgumentException { Map params = new HashMap(); params.put("msisdn", msisdn); params.put("responseCode", null); subscriberMapper.canCustomerSubscribe(params); System.out.println(params.get("responseCode")); }