Передача параметров класса SimpleJDBCCall

1

У меня есть хранимая процедура в y db, которая находится на сервере MYSQL. И когда я пытаюсь назвать это, он дает ошибку:

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: неверное количество аргументов для ПРОЦЕДУРЫ thu.productGetter; ожидаемый 2, получил 0 на 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.jdbc.core.simple.AbstractJdbcCall.executeCallInternal(AbstractJdbcCall.java:378) в org.springframework.jdbc.core.simple.AbstractJdbcCall.doExecute(AbstractJdbcCall.java:363)

Код Java:

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:

CREATE DEFINER='root'@'localhost' PROCEDURE 'productGetter'(IN maxPrice double,minPrice double)
BEGIN
        ...    
END$$

Я проверил множество примеров и не нашел решения для моей проблемы.

Есть идеи?

  • 0
    Полученная ошибка говорит о том, что вы не передали ему достаточно параметров. Проверьте, правильно ли установлены параметры на вашей params Map .
  • 0
    они действительно говорят, что не передали ни одного параметра, не меньше.
Показать ещё 3 комментария
Теги:
stored-procedures
spring
jdbctemplate

2 ответа

0

Я столкнулся с такой же проблемой после обновления от соединителя mysql 5.1 до 6.0.6, и способ решить - просто добавить: .withoutProcedureColumnMetaDataAccess() следующим образом:

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);
0

У меня было такое же сообщение о недостающих параметрах, но оказалось, что это было неправильное имя схемы

Ещё вопросы

Сообщество Overcoder
Наверх
Меню