У меня есть хранимая процедура в 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$$
Я проверил множество примеров и не нашел решения для моей проблемы.
Есть идеи?
Я столкнулся с такой же проблемой после обновления от соединителя 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);
У меня было такое же сообщение о недостающих параметрах, но оказалось, что это было неправильное имя схемы
params Map
.