首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SimpleJDBCCall类参数传递

SimpleJDBCCall类参数传递
EN

Stack Overflow用户
提问于 2014-05-27 17:48:12
回答 3查看 6.8K关注 0票数 2

我在y db中有一个存储过程,它位于MYSQL服务器上。当我试图调用它时,它会产生错误:

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:不正确的参数数为过程thu.productGetter;预期2,在org.springframework.jdbc.support.SQLExceptionSubclassTranslator.doTranslate(SQLExceptionSubclassTranslator.java:95),org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:73),org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:81),org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:1137),org.springframework.jdbc.core.JdbcTemplate.call(JdbcTemplate.java:1173),org.springframework得了0。jdbc.core.simple.AbstractJdbcCall.executeCallInternal(AbstractJdbcCall.java:378) at org.springframework.jdbc.core.simple.AbstractJdbcCall.doExecute(AbstractJdbcCall.java:363)

Java代码是:

代码语言:javascript
复制
SimpleJdbcCall jdbcCall = new SimpleJdbcCall(getJdbcTemplate())
                                    .withSchemaName("thu")
                                    .withProcedureName("productGetter");

    jdbcCall.addDeclaredParameter(new SqlParameter("maxPrice", Types.DOUBLE));
    jdbcCall.addDeclaredParameter(new SqlParameter("minPrice", Types.DOUBLE));

    Map<String, Object> params=new HashMap<String, Object>();
    params.put("maxPrice", maxPrice);
    params.put("minPrice", minPrice);


    jdbcCall.execute(params);

存储过程db代码是:

代码语言:javascript
复制
CREATE DEFINER=`root`@`localhost` PROCEDURE `productGetter`(IN maxPrice double,minPrice double)
BEGIN
        ...    
END$$

我检查了大量的例子,但没有找到任何解决我的问题的办法。

有什么想法吗?

EN

回答 3

Stack Overflow用户

发布于 2018-01-03 15:59:44

在将MySQL5.1连接器升级到6.0.6之后,我也遇到了同样的问题,解决方法就是以这种方式添加:.withoutProcedureColumnMetaDataAccess()

代码语言:javascript
复制
SimpleJdbcCall jdbcCall = new SimpleJdbcCall(getJdbcTemplate())
                                    .withSchemaName("thu")
                                    .withProcedureName("productGetter")
                                    .withoutProcedureColumnMetaDataAccess();

    jdbcCall.addDeclaredParameter(new SqlParameter("maxPrice", Types.DOUBLE));
    jdbcCall.addDeclaredParameter(new SqlParameter("minPrice", Types.DOUBLE));

    Map<String, Object> params=new HashMap<String, Object>();
    params.put("maxPrice", maxPrice);
    params.put("minPrice", minPrice);


    jdbcCall.execute(params);
票数 4
EN

Stack Overflow用户

发布于 2015-08-24 23:06:06

我收到了关于缺少参数的相同消息,但结果发现是模式名称错了。

票数 0
EN

Stack Overflow用户

发布于 2018-11-27 16:33:04

你可以试试MapSqlParamterSorce

代码语言:javascript
复制
SimpleJdbcCall jdbcCall = new SimpleJdbcCall(getJdbcTemplate())
                                    .withSchemaName("thu")
                                    .withProcedureName("productGetter")
                                    .withoutProcedureColumnMetaDataAccess();

jdbcCall.addDeclaredParameter(new SqlParameter("maxPrice", Types.DOUBLE));
jdbcCall.addDeclaredParameter(new SqlParameter("minPrice", Types.DOUBLE));

MapSqlParameterSource source = new MapSqlParameterSource();
source.addValue("maxPrice", maxPrice);
source.addValue("minPrice", minPrice);

jdbcCall.execute(source);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23895810

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档